我试图迭代一个集合,为每条记录调用TransformCvlValue
。
fields?.Select(x => TransformCvlValue(x, cvl)).ToList();
如果我致电.ToList()
,它会按预期工作。
为什么需要调用.ToList()
?
还有另一种方法吗?
答案 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);
}
}
这清楚地表明了您希望代码执行的操作,并且当您或您的同事将来必须维护代码时,这很容易理解。