Общий лямбда-синтаксис вопрос - PullRequest
4 голосов
/ 25 мая 2011

Так что я, кажется, уверен, что следующие 2 утверждения одинаковы

List<object> values = new List<object>();
values.ForEach(value => System.Diagnostics.Debug.WriteLine(value.ToString()));

И

List<object> values = new List<object>();
values.ForEach((object value) => { 
    System.Diagnostics.Debug.WriteLine(value.ToString());
});

И я знаю, что могу вставить несколько строк кода во втором примерекак

List<object> values = new List<object>();
values.ForEach((object value) => { 
    System.Diagnostics.Debug.WriteLine(value.ToString());
    System.Diagnostics.Debug.WriteLine("Some other action");
});

НО вы можете сделать то же самое в первом примере?Я не могу найти способ.

Ответы [ 4 ]

8 голосов
/ 25 мая 2011

Да, вы можете:)

        List<object> values = new List<object>();
        values.ForEach(value =>
                           {
                               System.Diagnostics.Debug.WriteLine(value.ToString());
                               System.Diagnostics.Debug.WriteLine("Some other action");
                           }

            );
2 голосов
/ 25 мая 2011

Единственная реальная разница между первым и вторым - это {}.Добавьте это к первому, и вы можете добавить столько строк, сколько захотите.Это не (значение объекта), которое позволяет вам добавлять несколько строк.

2 голосов
/ 25 мая 2011

Это прекрасно работает:

values.ForEach(value =>
        { System.Diagnostics.Debug.WriteLine(value.ToString()); }
);

Возможно, вы забыли ;

1 голос
/ 25 мая 2011

Как показали другие, вы можете использовать выражение lambda (с фигурными скобками), чтобы сделать это:

parameter-list => { statements; }

Однако стоит отметить, что это имеет ограничение:1006 * не может преобразовать лямбда-выражение в дерево выражений , только делегат .Например, это работает:

Func<int> x = () => { return 5; };

Но это не так:

Expression<Func<int>> y = () => { return 5; };
...