2015-05-29 2 views
2

Я пытаюсь изучить C# и использовать Aggregate. Я могу использовать проблему без проблем в Javascript, но по какой-то причине я не могу заставить свой код работать.Объяснить поведение агрегата C#

Моя конечная цель - взять список символов (все числа), преобразовать их в числа, объединить их и вернуть значение. Пока что, я просто хочу, чтобы Aggregate работал.

Я установил это, прежде чем делать какие-либо агрегации: int[] test = {1,2,3,4,5};

Когда у меня есть этот код:

int result = test.Aggregate ((current, total) => { 
    current += 1; 
    current + total; 
}); 

Я сказал: «Только назначение, вызов, увеличение, уменьшение, и новые выражения объекта могут быть используется как заявление « Однако я видел примеры многострочных лямбда-функций.

Я могу удалить строку current += 1; и фигурные скобки, и она будет работать, но моя цель - запустить несколько вещей перед каждой агрегацией.

Как получить выражение лямбда выполнить несколько строк кода?

ответ

3

current + total недопустим C# в этом контексте. Он действителен только в сокращенной форме для однорядных лямбда без фигурных скобок. В противном случае вам понадобится явный оператор return.

Вам нужно перефразировать как return current + total;

При использовании без фигурных скобок, то return подразумевается.

+0

Я дурак. Хорошо, поэтому добавление возвращается. Можете ли вы объяснить, почему, когда лямбда завернута в {}, мне нужно вернуть. Но когда это одноэтажное с возвратом недействительно? – ChadF

+1

Это просто функция компилятора, которая в однострочной версии без фигурных скобок допускает сокращенную форму без оператора return. – Baldrick

2

Лямбда, которые возвращают значение и использовать фигурные скобки, требуют «возвращения» заявление:

int[] test = { 1, 2, 3, 4, 5 }; 

      int result = test.Aggregate((current, total) => 
      { 
       current += 1; 
       current += total; 

       return current; 
      }); 
Смежные вопросы