c# - 通过 LINQ 将函数应用于集合的所有元素

标签 c# .net linq

<分区>

我最近开始使用 LINQ,它非常棒。我想知道 LINQ 是否允许我在不使用 foreach 的情况下将函数 - 任何函数 - 应用于集合的所有元素。类似于 python lambda 函数。

例如,如果我有一个 int 列表,我可以使用 LINQ 向每个元素添加一个常量吗

如果我有一个数据库表,我可以使用 LINQ 为所有记录设置一个字段吗?

我正在使用 C#

最佳答案

解决此问题的常见方法是添加您自己的 ForEach IEnumerable<T> 上的通用方法.这是我们在 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());

关于c# - 通过 LINQ 将函数应用于集合的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823532/

相关文章:

c# - 使用 linq 填充子对象

c# - 保存时DateTime时间戳正在更改

c# - 异步等待文件创建

c# - linq/lambda 查询中的双内连接?

c# - IEqualityComparer<T> 自定义实现和集合操作

c# - 如何使用 LINQ 和 EF Core 在树状层次结构中找到第一个父级

c#多维数组转换

.net - 如何仅序列化某些对象属性

.net - 散列Unicode密码

c# - 支持 IoC 的基类方法的接口(interface)声明