首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么List<T>的枚举数是公共的?

为什么List<T>的枚举数是公共的?
EN

Stack Overflow用户
提问于 2016-03-11 11:51:34
回答 2查看 654关注 0票数 16

列表中枚举数上的公共访问修饰符的原因是什么?

我期望私人修饰语而不是公共修饰语。

列表源代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-11 11:56:39

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

然后允许C#编译器在foreach循环中使用它..。避免任何堆分配,因为是一个结构。(一个可变的结构,这让我不得不说“啊!”但这是另一个故事。

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

代码语言:javascript
复制
List<string> list = new List<string> { "..." };
foreach (var item in list)
{
    Console.WriteLine(item);
}

然后编译器可以将其转换为如下所示:

代码语言:javascript
复制
List<string> list = new List<string> { "..." };
using (List<string>.Enumerator enumerator = list.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        string item = enumerator.Current;
        Console.WriteLine(item);
    }
}

请注意这里的enumerator类型-但是如果我们有:

代码语言:javascript
复制
IEnumerable<string> list = new List<string> { "..." };
foreach (var item in list)
{
    Console.WriteLine(item);
}

它将使用:

代码语言:javascript
复制
using (IEnumerator<string> enumerator = list.GetEnumerator())

..。它涉及堆分配,因为IEnumerator<string>是引用类型。IEnumerable<T> GetEnumerator()List<T>中的实现返回一个装箱的List<string>.Enumerator

票数 30
EN

Stack Overflow用户

发布于 2016-03-11 11:56:14

仅仅是因为它在许多其他组件中被重用。

您可以讨论这是否是使用结构的有效理由,而不是底层接口,但这是我猜的最重要的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35939570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档