[英]Select Statement doing a “for each” thing, then returning itself
我有一个数据管道。 我想对数据进行一些有条件的转换。 看来我可以像这样建立枚举而不触发它直到最后:
var data = read();
if (!adminUser) data = data.Select(d => {d.ClearAdminOnlyFields(); return d;});
if (summarize) data = data.Select(d => {d.ClearVerboseFields(); return d;});
if (translate) data = data.Select(d => {d.Translate(culture); return d;});
return data;
上面的数据是数千个项目。 我尝试使用谷歌搜索这种使用select的样式,但是找不到使用它的任何好的示例。 好像人们总是以列举.ToList()
然后执行变换的.ForEach()
但这样的多个枚举应该是比较慢! 似乎如果在其中进行if检查,则进行一次较大的foreach
也会比较慢。
我的问题是:我认为这样做更快会错吗? 如果是这样,您能否解释什么替代方法更快/更好,为什么?
您不应该这样做,不是因为它不起作用,而是因为它违反了Select
的普遍期望(转换数据而没有副作用)。
您应该使用foreach
来代替这种逻辑。 您应该可以使用单个foreach
进行此操作,仅枚举一次。 使用“ Select
执行此操作并不快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.