gpt4 book ai didi

c# - 为什么 List 的 Enumerator 是公开的?

转载 作者:可可西里 更新时间:2023-11-01 07:42:49 24 4
gpt4 key购买 nike

List中Enumerator的public访问修饰符是什么原因?

我希望使用 private 修饰符而不是 public。

List source code

最佳答案

它是公开的,因此 GetEnumerator()可以声明方法以返回它。

然后允许 C# 编译器在 foreach 中使用它循环...避免任何堆分配因为List.Enumerator是一个结构。 (一个可变结构,这让我“呃!”但那是另一回事了。)

所以当你有这样的事情时:

List<string> list = new List<string> { "..." };
foreach (var item in list)
{
Console.WriteLine(item);
}

然后编译器可以将它转换成类似这样的东西:

List<string> list = new List<string> { "..." };
using (List<string>.Enumerator enumerator = list.GetEnumerator())
{
while (enumerator.MoveNext())
{
string item = enumerator.Current;
Console.WriteLine(item);
}
}

注意 enumerator 的类型这里 - 而如果我们有:

IEnumerable<string> list = new List<string> { "..." };
foreach (var item in list)
{
Console.WriteLine(item);
}

它将使用:

using (IEnumerator<string> enumerator = list.GetEnumerator())

... 涉及堆分配 IEnumerator<string>是引用类型。 IEnumerable<T>实现GetEnumerator()List<T>返回一个盒装 List<string>.Enumerator .

关于c# - 为什么 List<T> 的 Enumerator 是公开的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939570/

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