Rez*_*eni 5 c# ienumerable foreach extension-methods
快速提问,请参阅此代码:
List<int> result = new List<int>();
var list = new List<int> { 1, 2, 3, 4 };
list.Select(value =>
{
result.Add(value);//Does not work??
return value;
});
Run Code Online (Sandbox Code Playgroud)
而且:
result.Count == 0 //true
Run Code Online (Sandbox Code Playgroud)
为什么result.Add(value)没有执行?
然而,这不执行,另一个问题是有办法做的foreach上的IEnumerable与Extention方法?
除此之外: IEnumerable.ToList().Foreach(p=>...)
Ree*_*sey 17
为什么result.Add(value)没有执行?
这是因为LINQ使用延迟执行.在您实际枚举结果(返回Select)之前,代理将不会执行.
要演示,请尝试以下操作:
List<int> result = new List<int>();
var list = new List<int> { 1, 2, 3, 4 };
var results = list.Select(value =>
{
result.Add(value);//Does not work??
return value;
});
foreach(var item in results)
{
// Just iterating through this will cause the above to execute...
}
Run Code Online (Sandbox Code Playgroud)
话虽如此,这是一个坏主意.如果可以避免LINQ查询,则不应该有副作用.您可以将其Select视为一种转换数据的方式,而不是执行代码.
但是这没有执行,另一个有问题的问题是使用扩展方法对IEnumerable进行预测吗?
你可以编写自己的扩展方法:
public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
{
foreach(var item in items)
action(item);
}
Run Code Online (Sandbox Code Playgroud)
但是,我建议不要这样做.有关详细信息,请参阅Eric Lippert关于此主题的帖子.
| 归档时间: |
|
| 查看次数: |
559 次 |
| 最近记录: |