繁体   English   中英

选择执行“针对每个”的语句,然后返回自身

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM