关于两种foreach写法中Directory.GetFileSystemEntries执行次数的确认
关于
Directory.GetFileSystemEntries在foreach中执行次数的解答 嘿,这个问题问得很细致!我来给你把逻辑拆解清楚:
结论先行:不管用哪段代码,Directory.GetFileSystemEntries(path)都只会执行一次
原因其实和C#里foreach的执行机制直接相关:
- 当你写
foreach (var item in 集合表达式)的时候,编译器会先一次性计算完这个集合表达式,拿到对应的集合对象(这里就是Directory.GetFileSystemEntries返回的string[]数组),之后整个循环过程都是基于这个已经生成好的数组来遍历的,绝对不会在每一轮循环里重新去调用方法。 - 你贴的第一段代码,只是把方法调用直接写在了
foreach的括号里,但底层逻辑和第二段代码完全一致——都是先调用方法生成数组,再遍历数组。第二段代码只是多了一个显式的变量来存储这个数组,本质上没有任何区别。
如果想自己验证的话,你可以写个简单的测试:比如封装一个每次调用都会打印日志的方法,然后把它放到foreach里,运行后会发现日志只打印一次,这就直观证明了方法只执行了一次。
内容的提问来源于stack exchange,提问作者tobeypeters
相关产品推荐
相关产品推荐

