首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中初始化Generic.List

在C#中初始化Generic.List
EN

Stack Overflow用户
提问于 2009-04-15 14:34:32
回答 7查看 68.1K关注 0票数 46

在C#中,我可以使用以下语法初始化列表。

代码语言:javascript
复制
List<int> intList= new List<int>() { 1, 2, 3 };

我想知道{}语法是如何工作的,以及它是否有名称。有一个接受IEnumerable的构造函数,你可以调用它。

代码语言:javascript
复制
List<int> intList= new List<int>(new int[]{ 1, 2, 3 });

这看起来更“标准”。当我解构列表的默认构造函数时,我只看到

代码语言:javascript
复制
this._items = Array.Empty;

我希望能够做到这一点。

代码语言:javascript
复制
CustomClass abc = new CustomClass() {1, 2, 3};

并且能够使用1, 2, 3列表。这是怎么回事?

更新

乔恩·斯基特回答

它正在调用无参数构造函数,然后调用

代码语言:javascript
复制
> List<int> tmp = new List<int>();
> tmp.Add(1); tmp.Add(2); tmp.Add(3);
> List<int> intList = tmp;

我明白这是怎么回事。我想知道是怎么回事。语法如何知道调用Add方法呢?

更新

我知道,接受乔恩·斯基特的回答是多么陈词滥调。但是,包含字符串和int的示例非常棒。还有一个非常有用的MSDN页面:

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-15 14:36:33

这称为集合初始值设定项。它调用无参数构造函数,然后调用Add:

代码语言:javascript
复制
List<int> tmp = new List<int>();
tmp.Add(1);
tmp.Add(2);
tmp.Add(3);
List<int> intList = tmp;

该类型的要求为:

它实现了IEnumerable

  • It的
  • 重载了适用于您提供的参数类型的Add。您可以在大括号中提供多个参数,在这种情况下,编译器将查找具有多个参数的Add方法。

例如:

代码语言:javascript
复制
public class DummyCollection : IEnumerable
{
    IEnumerator IEnumerable.GetEnumerator()
    {
        throw new InvalidOperationException("Not a real collection!");
    }

    public void Add(string x)
    {
        Console.WriteLine("Called Add(string)");
    }

    public void Add(int x, int y)
    {
        Console.WriteLine("Called Add(int, int)");
    }
}

然后,您可以使用:

代码语言:javascript
复制
DummyCollection foo = new DummyCollection
{
    "Hi",
    "There",
    { 1, 2 }
};

(当然,通常您会希望您的集合正确地实现IEnumerable ...)

票数 65
EN

Stack Overflow用户

发布于 2009-04-15 14:36:42

阅读。基本上,您可以对每个自定义类型执行此操作,这些类型是一个列表(实现IEnumerable)。

票数 7
EN

Stack Overflow用户

发布于 2009-04-15 14:37:45

它们被称为collection initializers (也请参见here),它们的工作方式是通过寻找可以执行其指令的Add()方法。它为花括号中的每个整数调用Add()

Add()方法的搜索是纯粹的编译器魔术。找到该名称的方法是硬编码的。

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

https://stackoverflow.com/questions/751990

复制
相关文章

相似问题

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