在Linq Select上调用ToList()

时间:2017-12-21 20:08:41

标签: c# linq

我试图迭代一个集合,为每条记录调用TransformCvlValue

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

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

还有另一种方法吗?

1 个答案:

答案 0 :(得分:4)

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

当你真的想要将元素从一种类型投射到另一种类型时,应该主要使用

Select(),例如通过对元素应用投影。当你想为IEnumerable<T>中的每个元素调用一个方法时,不应该

对我来说,最可读的简单方法可能是简单地迭代字段:

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

这清楚地表明了您希望代码执行的操作,并且当您或您的同事将来必须维护代码时,这很容易理解。