#c# #.net #c#-4.0 #syntax #lambda
#c# #.net #c #-4.0 #синтаксис #лямбда
Вопрос:
Итак, я, кажется, уверен, что следующие 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");
});
Но можете ли вы сделать то же самое в первом примере? Кажется, я не могу придумать способ.
Комментарии:
1. Если в C # был оператор запятой, как в C или C , то это можно было бы использовать, чтобы избежать скобок. Однако в C # нет оператора запятой (за исключением исключения в циклах for). Но в C # нет этого оператора, поэтому он несколько неуместен.
Ответ №1:
Да, вы можете 🙂
List<object> values = new List<object>();
values.ForEach(value =>
{
System.Diagnostics.Debug.WriteLine(value.ToString());
System.Diagnostics.Debug.WriteLine("Some other action");
}
);
Комментарии:
1. также с типизированными свойствами, BlahObj. ForEach(значение => { Debug. Строка записи (значение. BlahProperty); });
Ответ №2:
Это работает нормально:
values.ForEach(value =>
{ System.Diagnostics.Debug.WriteLine(value.ToString()); }
);
Возможно, вы забыли ;
Комментарии:
1. 1: Я также полагал, что OP забыл бы
;
. Лолз в @o6tech, который, по-видимому, не слишком хорошо читает вопросы2. … по-видимому, я этого не делаю. 1 вам 🙂
3. Что ж, прочитав еще раз, я все еще думаю, что мой комментарий был верен. Его первый пример (к которому он хотел добавить несколько операторов) не включал {}’s , так что, возможно, он их опускал, нет?
Ответ №3:
Единственное реальное различие между первым и вторым — это { } . Добавьте это к первому, и вы сможете добавить столько строк, сколько захотите. Это не (значение объекта), которое позволяет вам добавлять несколько строк.
Ответ №4:
Как показали другие, для этого можно использовать оператор lambda (с фигурными скобками):
parameter-list => { statements; }
Однако стоит отметить, что это имеет ограничение: вы не можете преобразовать лямбда-выражение в дерево выражений, только делегат. Так, например, это работает:
Func<int> x = () => { return 5; };
Но это не:
Expression<Func<int>> y = () => { return 5; };