【发布时间】:2014-03-17 15:35:31
【问题描述】:
我做了一个扩展,在 ObservableCollection 上添加了 ForEach() 方法:
public static void ForEach<T>(this ObservableCollection<T> enumerable, Action<T> action)
{
foreach (var item in enumerable)
action(item);
}
当我使用它时,像这样:
private bool Bar(int i)
{
return i % 2 == 1;
}
private void Foo()
{
Boolean ok = true;
ObservableCollection<int> oc = new ObservableCollection<int> { 1, 2, 3, 4 };
oc.ForEach(i => ok &= Bar(i));
//ok is now false
}
我不明白ok 布尔值如何获取action(item) 执行的Bar() 方法返回的值?
【问题讨论】:
-
因为它在本地范围内,并且您使用
&=分配它。 -
您预计会发生什么? Lambda 捕获局部变量,因此它们存储对它们的引用并因此能够更改它们。
-
@AdamHouldsworth 谢谢,那是我不明白的。现在很清楚了。
标签: c# lambda expression