2011-10-24 69 views
3

在Java中,我可以創建一個List並立即使用靜態初始化程序填充它。事情是這樣的:C#中的集合初始化器#

 

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

這是方便,因爲我可以動態創建列表,並將其作爲參數傳遞給函數。這樣的事情:

 

printList(new ArrayList&ltString>() 
{{ 
    Add("a"); 
    Add("b"); 
    Add("c"); 
}}); 
 

我是新來的C#和試圖找出如何做到這一點,但我來空。這在C#中可能嗎?如果是這樣,那該怎麼辦?

+0

這ISN描述't a'[static initializer](http://download.oracle.com/javase/tutorial/java/javaOO/initial.html)「 - 它是一個實例初始化程序 –

+0

感謝您的澄清。 – user489041

回答

8

你可以使用一個集合初始化:

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

這編譯成來電來Add方法的序列。
如果Add的方法需要多個參數(如字典),你需要包裝的每個呼叫在一個單獨的一對大括號:

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

@ user489041:您也可以初始化Dictionary,請參閱下面的答案中的示例 – sll

2

由於C# 3.0你可以做得一樣好:

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

MSDN,Collection Initializers

集合初始化,您可以指定一個或多個元素 intializers在初始化實現 IEnumerable的集合類。元素初始值設定項可以是一個簡單的值,一個 表達式或一個對象初始值設定項。通過使用集合初始化程序 ,您不必在源代碼中指定多次調用 類的Add方法;編譯器添加這些調用。

編輯:回答評論關於字典

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

是的,它是在MSDN here