C#Lambda表达式更新值为可空字段

时间:2014-02-18 09:19:48

标签: c# lambda

请看下面的代码:

SomeList.Where(x => !x.Name.Equals("NO")).All(x => x.flag=true);

SomeListICollection

对于SomeList中的每个对象,如果Name不是NO,则对象的flag应更新为true。现在问题是flagbool?

如何在这样的lambda表达式中为flag赋值?

1 个答案:

答案 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)