gpt4 book ai didi

C# 更好地初始化列表然后遍历它,或者只是在循环条件下初始化?

转载 作者:太空狗 更新时间:2023-10-29 20:46:23 27 4
gpt4 key购买 nike

我最终得到了很多这样的代码:

List<string> dates = someMethodCall();
foreach (string dateStr in dates) { }

我通常声明我正在迭代的对象,然后在 foreach 条件中使用它,因为担心 someMethodCall() 会在每次迭代时发生环形。是这样吗?我更愿意这样做:

foreach (string dateStr in someMethodCall()) { }

但我只想在 someMethodCall() 只发生一次时执行此操作,然后它的结果会在每次后续迭代中缓存。

最佳答案

在这两种情况下,该方法只会被调用一次。

第一种方法具有可读性优势,因为您可以命名变量并用变量名描述其中的内容。它将使代码更加自文档化并提高可维护性。


引用权威消息来源:

C# Language Specification - 8.8.4 The foreach statement

 foreach (V v in x) embedded-statement

is then expanded to:

{
E e = ((C)(x)).GetEnumerator();
try {
V v;
while (e.MoveNext()) {
v = (V)(T)e.Current;
embedded-statement
}
}
finally {
… // Dispose e
}
}

很明显,上述foreach 语句中的表达式x 在扩展中只被求值一次。

关于C# 更好地初始化列表然后遍历它,或者只是在循环条件下初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com