gpt4 book ai didi

c# - .NET 循环完整性 101

转载 作者:行者123 更新时间:2023-11-30 14:37:27 24 4
gpt4 key购买 nike

我一直对这个感到困惑。考虑以下循环:

int [] list = new int [] { 1, 2, 3 };  
for (int i=0; i < list.Length; i++) { }
foreach (int i in list) { }
while (list.GetEnumerator().MoveNext()) { } // Yes, yes you wouldn't call GetEnumerator with the while. Actually never tried that.
  • 上面的 [list] 是硬编码的。如果在循环进行迭代时从外部更改列表,会发生什么情况?
  • 如果 [list] 是一个只读属性,例如int List{get{return(new int [] {1,2,3});}}?这会扰乱循环吗?如果不是,它会在每次迭代中创建一个新实例吗?

最佳答案

嗯:

  • for针对 list.Length 进行循环检查在每次迭代中;你实际上并没有访问list在循环中,所以内容是无关紧要的
  • foreach循环仅使用 list获取迭代器;将其更改为引用不同的列表不会有任何区别,但是如果您在结构上修改了列表本身(例如,通过添加一个值,如果这确实是 List<int> 而不是 int[] ),这将使迭代器
  • 您编写的第三个示例将永远持续下去,除非列表被清除,因为它每次都会获得一个新的迭代器。如果您想要更明智的解释,请发布更明智的代码

从根本上说,您需要了解数组内容与更改变量引用的对象之间的区别 - 然后给我们一个非常具体的情况来解释。不过一般来说,foreach循环仅在获取迭代器时直接接触源表达式一次 - 而 for loop 本身并没有什么魔力,它的访问频率仅取决于代码——for 的条件和“步骤”部分。循环在每次迭代时执行,因此如果您在这些部分的任何一个中引用变量,您将看到任何变化...

关于c# - .NET 循环完整性 101,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233361/

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