C#中的集合初始值设定项

时间:2011-10-24 20:36:29

标签: c# java static-initializer static-initialization

在Java中,我可以创建一个List并使用静态初始化程序立即填充它。像这样:


List <String> list = new ArrayList<String>()
{{
    Add("a");
    Add("b");
    Add("c");
}}

这很方便,因为我可以动态创建列表,并将其作为参数传递给函数。像这样:


printList(new ArrayList<String>()
{{
    Add("a");
    Add("b");
    Add("c");
}});

我是C#的新手,并试图弄清楚如何做到这一点,但我是空洞的。这可能在C#中吗?如果是这样,怎么办呢?

3 个答案:

答案 0 :(得分:8)

您可以使用集合初始值设定项:

new List<string> { "a", "b", "c" }

这会编译为对Add方法的一系列调用 如果Add方法接受多个参数(例如,字典),则需要将每个调用包装在一对单独的大括号中:

new Dictionary<string, Exception> {
    { "a", new InvalidProgramException() },
    { "b", null },
    { "c", new BadImageFormatException() }
}

答案 1 :(得分:2)

C# 3.0以来你也可以这样做:

List <String> list = new List<String>
                     {
                             "a", "b", "c"
                     };

MSDN,Collection Initializers

  

集合初始值设定项允许您指定一个或多个元素   初始化实现的集合类时的初始化程序   IEnumerable的。元素初始值设定项可以是一个简单的值,即   表达式或对象初始值设定项。通过使用集合初始化程序   您不必指定多次调用Add方法   您的源代码中的类;编译器添加了调用。

编辑:回答有关词典的评论

IDictionary<string, string> map = new Dictionary<string, string>
{
   { "Key0", "Value0" },
   { "Key1", "Value1" }
};

答案 2 :(得分:1)

是的,它已在MSDN here

上描述