Применение действия делегата - PullRequest
0 голосов
/ 22 октября 2009

Чтобы понять коллекцию, я попытался найти квадрат каждого числа, переданного в коллекция.

Мой код: (Конечно, я мог бы реализовать по-другому, просто чтобы узнать, как это происходит, я сделал пустую реализацию)

   static void Main()
   {
      ICollection<int> Present = (ICollection<int>)
                                  a.GetNumbers(new int[]{1,2,3});

       foreach (int i in Present)
       {
                   Console.WriteLine("{0}", i);
       }
   }


  public IEnumerable<int> GetNumbers(int[] Numbers)
  {
     //first trial
     ICollection<int> col = 
                           Array.ForEach(Numbers, delegate { x => x * x; });

     //second trial
     ICollection<int> col = Array.ForEach(Numbers, ( x => x * x ));

     return (IEnumerable<int>)col.GetEnumerator();

  }

В чем проблема с Array.ForEach в обоих трейлах внутри GetNumbers ()?

Я получаю сообщение «Назначение и приращение разрешено». Ошибка.

Ответы [ 2 ]

2 голосов
/ 22 октября 2009

Action ничего не возвращает, равно как и Array.ForEach - но ваше лямбда-выражение возвращает, и вы пытаетесь использовать результат Array.ForEach, несмотря на то, что это метод void. Вместо этого попробуйте Array.ConvertAll, в котором используется Converter<TInput, TOutput> (эквивалент Func<TIn, TOut>).

В качестве альтернативы, если вы хотите изучить Array.ForEach и Action, сделайте что-то вроде:

Array.ForEach(Numbers, x => Console.WriteLine(x * x));

(Кроме того, ваша первая попытка выглядит как смесь синтаксиса анонимного метода и синтаксиса лямбда-выражения. Это не сработает.)

Как это:

int[] squares = Array.ConvertAll(numbers, x => x*x);
0 голосов
/ 22 октября 2009

Это пример из учебника, где пригодятся методы расширений LINQ, почему бы вам просто не сделать это:

public IEnumerable<int> GetNumbers(IEnumerable<int> numbers)
{
    return numbers.Select(x => x * x);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...