我正在尝试为每条记录迭代调用 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/