Dun*_*oud 1 .net c# linq lambda
Ciao大家,我终于能够从.NET Framework 2.0切换到.NET Framework 4.0.
我正在尝试获得有关lambda表达式和LINQ的一些经验.
有可能翻译这个:
for (int cont = 0;cont < args.Length; cont++)
Console.WriteLine("#" + cont + " " + "<" + args + ">");
Run Code Online (Sandbox Code Playgroud)
单行lambda表达式,或者使用LINQ,甚至是其他一些我不知道的costruct?先感谢您.
LINQ操作不应该有副作用或执行操作.它们只应用于从IEnumerable<T>另一个IEnumerable<T>(或从IQueryable<T>另一个IQueryable<T>或另一个IEnumerable<T>)生成(或者如果聚合.Max,则.All......单个结果)
请阅读http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx.
(并注意这个问题在SO上问得很详细...例如我在这里回答ToList().在Linq中的ForEach并看到类似问题的解决方案)
现在,如果你讨厌自己,你可以这样做:
strs.Select((p, index) =>
{
Console.WriteLine("#" + index + " " + "<" + p + ">");
return true;
}).All(p => p);
Run Code Online (Sandbox Code Playgroud)
我们正在使用.All(p => p)"实现" Select操作.这是因为Select"懒惰",如果没有人循环它将不会被执行.
从技术上讲,你甚至可以尝试对它进行一些模糊处理:
strs.Select((p, index) =>
{
Console.WriteLine("#" + index + " " + "<" + p + ">");
return false;
}).Any(p => p);
Run Code Online (Sandbox Code Playgroud)
(All检查所有元素是否都true停止,如果其中一个是false,那么它必须循环所有元素(因为我们总是return true;).Any(如所写)检查至少有一个元素true然后停止(但是我们所有的元素)元素是false,因为我们这样return false;做Any将循环所有元素)
现在......这些技术优于使用的优点ToList是我们不会"复制" Array到List<T>只是使用"错误"的方法List<T>.如果ForEach方法List<T>是"错误的",复制Array到一个List只是使用它是双重错误.