c# - 非常简单的lambda表达式

标签 c# .net linq lambda

再见大家, 我终于能够从 .NET Framework 2.0 切换到 .NET Framework 4.0。

我正在尝试获取有关 lambda 表达式和 LINQ 的一些经验。

是否可以翻译这个:

for (int cont = 0;cont < args.Length; cont++)
    Console.WriteLine("#" + cont + " " + "<" + args + ">");

变成单行 lambda 表达式,或使用 LINQ,或什至是我不知道的其他构造? 提前谢谢你。

最佳答案

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().ForEach in Linq 并查看类似问题的解决方案)

现在,如果你讨厌自己,你可以这样做:

strs.Select((p, index) =>
{
    Console.WriteLine("#" + index + " " + "<" + p + ">");
    return true;
}).All(p => p);

我们正在使用 .All(p => p) “实现”Select手术。这是因为 Select是“懒惰的”,如果没有人循环它就不会执行。

从技术上讲,您甚至可以尝试对其进行一些混淆:

strs.Select((p, index) =>
{
    Console.WriteLine("#" + index + " " + "<" + p + ">");
    return false;
}).Any(p => p);

( All 检查所有元素是否为 true 并在其中一个为 false 时停止,因此它必须循环所有元素(因为我们总是 return true; )。Any(如所写) 检查至少有一个元素是 true 然后停止(但我们所有的元素都是 false ,因为我们做 return false; 所以 Any 将循环所有元素)

现在……这些技术相对于使用 ToList 的优势是我们不是在“复制” ArrayList<T>只是为了使用 List<T> 的“错误”方法.如果ForEach List<T>的方法|是“错误的”,复制一个 ArrayList仅仅使用它是双重错误的。

关于c# - 非常简单的lambda表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886041/

相关文章:

c# - 系统 namespace 在全新安装时缺少 MonoDevelop

c# - 如何使用 ServiceStack 中的证书对客户端进行身份验证?

c# - 将标题附加到文本文件

.net - 自托管 Web API 应用程序引用来自不同程序集的 Controller

c# - 在 LINQ 中编写 SQL 查询

C# 确定列表中的重复项

c# - 如何使用 async 和 await 发出大量并发 Web 请求?

c# - 关于使用 Linq/C# 检索嵌套 XML 元素的空对象引用

c# - LINQ 根据对象行中的整数获取 10 个对象

c# - ContextMenu 样式在不使用任何 Binding 的情况下产生奇怪的 Binding 错误