You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# LINQ性能疑问:Any子句中扩展方法是否每次迭代都执行

关于LINQ中ConvertToString()是否重复执行的问题解答

答案是肯定的——searchId.ConvertToString()会在遍历itemCollection的每个元素时都被执行一次。

原因分析:

你把ConvertToString()的调用放在了Any方法的lambda表达式里,而LINQ的Any是延迟执行的:它会逐个枚举itemCollection中的元素,每检查一个item,就会完整执行一次lambda里的逻辑。这意味着哪怕searchId是固定的int值,每次迭代都会重新调用一次转换方法,生成相同的字符串结果。

优化建议:

既然searchId的值不会在遍历过程中改变,完全可以提前把转换后的字符串计算好,放在Any外面,这样转换操作只会执行一次,能避免不必要的重复计算(尤其是当集合元素很多的时候,这点优化会更明显):

public static bool CheckIdExists(int searchId) 
{ 
    // 提前转换,只执行一次
    string searchIdStr = searchId.ConvertToString();
    return itemCollection.Any(item => item.Id.Equals(searchIdStr)); 
}

这种写法不仅性能更好,代码的可读性也更强——一眼就能看出searchIdStr是个固定值,不会在迭代中变化。

内容的提问来源于stack exchange,提问作者Abdul Hameed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:48:34