请看下面的代码:
SomeList.Where(x => !x.Name.Equals("NO")).All(x => x.flag=true);
SomeList
是ICollection
对于SomeList
中的每个对象,如果Name
不是NO
,则对象的flag
应更新为true
。现在问题是flag
是bool?
如何在这样的lambda表达式中为flag
赋值?
答案 0 :(得分:4)
您基本上要做的是避免使用foreach
,这是徒劳的事情。 Alexander的答案使用ForEach
扩展方法,但您还必须使用ToList
方法实现列表。
最优雅的方法是使用foreach
循环。
foreach (var item in SomeList.Where(x => !x.Name.Equals("NO")))
item.flag = true;
如果您真的想要一个函数式编程风格来调用集合的所有成员,请编写自己的扩展方法或使用Ix.NET which already provides such helper extensions。
var n = 0;
Enumerable.Range(0, 10).Do(x => n += x)
它提供以下重载
IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext)
IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action onCompleted)
IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action<Exception> onError)
IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action<Exception> onError, Action onCompleted)
IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, IObserver<TSource> observer)