我最近开始使用LINQ,它令人惊叹.我想知道LINQ是否允许我在不使用foreach的情况下将函数(任何函数)应用于集合的所有元素.类似python的lambda函数.

例如,如果我有一个整型列表,是否可以使用LINQ向每个元素添加一个常量

如果我有一个DB表,我可以使用LINQ为所有记录设置一个字段吗.

我用的是C#

推荐答案

解决此问题的一种常见方法是在IEnumerable<T>上添加您自己的ForEach泛型方法.这是我们在MoreLINQ里有的一个:

public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
    source.ThrowIfNull("source");
    action.ThrowIfNull("action");
    foreach (T element in source)
    {
        action(element);
    }
}

(其中ThrowIfNull是任何引用类型的扩展方法,这是显而易见的.)

很有意思的是看看这是否是.NET 4.0.它与LINQ的功能风格背道而驰,但毫无疑问,很多人都觉得它很有用.

一旦你得到了它,你就可以写下这样的东西:

people.Where(person => person.Age < 21)
      .ForEach(person => person.EjectFromBar());

.net相关问答推荐

EGC / 文本元素上的 .NET String.Split

部署时如何控制红隼端口?

C#字符串的GetHashCode()是如何实现的?

如何使用 C# 关键字作为属性名称?

如何从标头中检索基本身份验证凭据?

代理、包装器或外观类之间有什么区别

如何在 C# 中创建表达式树来表示String.Contains("term")?

.NET 应用程序的链接器状态(又名请先生,我可以有一个链接器2009 年版)

比较 C# 中的字符串和对象

为什么循环引用被认为是有害的?

RNGCryptoServiceProvider 的优缺点

Automapper:使用 ReverseMap() 和 ForMember() 进行双向映射

如何等到远程 .NET 调试器附加

LINQ 性能常见问题解答

HashSet 是否保留插入顺序?

C# 相当于 Java 的 <?在泛型中扩展 Base>

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

风格上的差异:IDictionary vs Dictionary

.NET 高级别的 .NET 4.0 和 .NET 4.5 的区别

DateTime.Compare 如何判断日期是否小于 30 天?