c# - 在 Linq Select 上调用 ToList()

标签 c# linq

我正在尝试为每条记录迭代调用 TransformCvlValue 的集合。

fields?.Select(x => TransformCvlValue(x, cvl)).ToList();

如果我调用 .ToList(),它会按预期工作。 为什么需要调用.ToList()

还有其他方法吗?

最佳答案

调用 Select()IEnumerable<T> 上不会立即执行操作,而是构建一个新的 IEnumerable<T>使用指定的转换/操作。 通常,LINQ 扩展方法仅在 IEnumerable<T> 时被调用。 s 被具体化,例如通过在 foreach 中迭代它们或调用 .ToList() .

Select()当你真的想将元素从一种类型投影到另一种类型时,应该主要使用,例如通过对元素应用投影。当您想为 IEnumerable<T> 中的每个元素调用一个方法时,不应使用它.

对我来说,最易读的直接方法可能是简单地遍历字段:

if (fields != null)
{
    foreach (var field in fields)
    {
        TransformCvlValue(field, cvl);
    }
}

这清楚地表明了您希望代码做什么,并且在您或您的同事将来必须维护代码时也很容易理解。

关于c# - 在 Linq Select 上调用 ToList(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932063/

相关文章:

c# - 使用派生类型调用扩展方法重载

c# - Lync UCMA SDK Server - 全局订阅所有 Presentities 的状态更新

c# - 在 .NET Core 3 中获取嵌入式资源内容的类型安全方式

c# - 如何在列表中查找总和小于或等于数字的项目

使用 DataTable 的 Select 命令时,C# 忽略值中的尾随空格

c# - LINQ 获取 TreeView 中最深层次的节点

.net - 将 IEnumerable 转换为列表

c# - 如何在即时窗口中轻松查看数据表或数据 View 的内容

c# - 尝试将 Distinct() 放入相对复杂的 LINQ 查询中

c# - 迭代 IQueryable 而不调用 ToList()