2015-04-09 1 views
0

Я пытаюсь понять синтаксис ConvertAll в C#, и, несмотря на несколько примеров и попытку их копирования, я не могу получить следующую строку, содержащую s2 для компиляции; VSE2013 говоритСинтаксис C# ConvertAll

Ошибка 1 Перегрузка метода 'ConvertAll' принимает 1 аргумент.

что означает сообщение об ошибке? Где я иду не так? И да, я понимаю, что Select гораздо лучше использовать в этих ситуациях по нескольким причинам. Благодаря!

static int Main(string[] args) 
{ 
    Console.WriteLine ("jello world"); 

    int s1 = args.Sum(st => int.Parse(st)); 
    int s2 = args.ConvertAll(x => int.Parse(x)).Sum(); 
    int s3 = args.Select(st => int.Parse(st)).Take(2).Sum(); 
    return 0; 
} 
+0

может быть, если вы объясните ш что вы пытаетесь сделать? – JamesSugrue

ответ

1

Изменение args.ConvertAll(x => int.Parse(x)).Sum(); в Array.ConvertAll(args, x => int.Parse(x)).Sum();.

Как сообщалось в сообщении об ошибке, «ConvertAll» не принимает 1 аргумент, поэтому вы должны указать на то, что вам нужно больше аргументов (в данном случае, массива).

См. MSDN для правильного использования Array.ConvertAll.

+0

Спасибо за ваши комментарии; Я уже нашел этот синтаксис, но есть множество примеров, показывающих форму int [] s2 = args.ConvertAll (делегат-конвертер); это устарело? – user3150422

+0

Вы уверены, что эти примеры не были со списками, а не с массивами? Это правильный синтаксис для списков. См. Разницу в примерах [здесь] (https://msdn.microsoft.com/en-us/library/kt456a2y (v = vs.110) .aspx). –

+0

Вы правы, и это была моя основная проблема: я думал, что args был списком, когда это был массив. Благодаря! Если я конвертирую его в список с: List list = args.OfType () .ToList(); то я могу суммировать его с помощью int ss = list.ConvertAll (x => int.Parse (x)). Sum(); – user3150422

2

Вы звоните ConvertAll на реальном массиве экземпляр - но ConvertAll является статический метод, следовательно, не имеет доступа к содержимому вашего массива - вам нужно передать в массив в качестве первого параметра так, что может использовать его - и так как это статический метод должен вызвать его на самом Array класс:

int s2 = Array.ConvertAll(args, x => int.Parse(x)).Sum(); 

Также короче, используя метод группы:

int s2 = Array.ConvertAll(args, int.Parse).Sum();