2010-02-04 61 views

回答

5

命名數組在C#中不存在。另一種方法是使用Dictionary<string, string>重新創建類似的結構。

Dictionary<string, string> stringArray = new Dictionary<string, string>(); 
stringArray.Add("field1", "value1"); 
stringArray.Add("field2", "value2"); 
stringArray.Add("field3", "value3"); 

爲了通過他們迭代,可以使用以下命令:

foreach(KeyValuePair<string, string> kvp in stringArray) { 
    Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); 
} 
+0

這也有強類型的優勢。得愛泛型。 – 2010-02-04 22:26:28

+0

@Steve:迄今爲止在CLR 2.0 **中實現的最佳語言功能。 – 2010-02-04 22:28:20

+0

確實。大多數時候,這些低級別的優化並不是真正的讚賞,因爲它往往不是瓶頸所在。但是我能夠觀察到性能優勢的幾次之一就是我爲井字遊戲寫的一些AI。一旦我切換到泛型,並且無需進行任何類型轉換,我的性能提高了25%以上。 – 2010-02-04 22:56:39

1
var map = new Dictionary<String, String> 
       { 
        { "field1", "value1" }, 
        { "field2", "value2" }, 
        { "field3", "value3" } 
       } 

或沒有集合初始化。

var map = new Dictionary<String, String>(); 

map["field1"] = "value1"; 
map["field2"] = "value2"; 
map["field3"] = "value3"; 

甚至有一個專門的類StringDictionary串映射到經常被忽略的命名空間System.Collections.Specialized字符串,但我更喜歡Dictionary<TKey, TValue>,因爲它實現更豐富的接口。

+0

對不起,我不是更具體的錯,希望一次添加一個。最後還添加了一個循環的東西,反正upvoted :) – 2010-02-04 22:26:05

0

您試圖重新關聯數組 - 在C#中,我通常會用一個字典

Dictionary<string,string> stringArray = new Dictionary<string,string>(); 

然後你可以用兩種方法分配數值

stringArray["field1"] = "value1"; 
stringArray.Add("field2","value2"); 

字典可以用來存儲任何鍵/值對組合,如:

Dictionary<int,string>() 
Dictionary<long,KeyValuePair<string,long>>() 
etc. 

如果你絕對知道,你只需要一個鍵時,將要返回的值是一個字符串,字符串那麼你也可以使用的NameValueCollection

NameValueCollection stringArray = new NameValueCollection(); 

,並再次,你可以使用兩個相同的方法來添加值

stringArray["field1"] = "value1"; 
stringArray.Add("field2","value2"); 

兩個大tatypes也有其他方便的方法,如

stringArray.Clear(); // make it empty 
stringArray.Remove("field1"); // remove field1 but leave everything else 

檢查出你在Visual Studio智能感知更多的好東西

其他節點

注意,一個NameValueColelction不(僅僅)提供了一個單一對一映射 - 您可以將多個值與單個名稱相關聯。

var map = new NameValueCollection(); 

map.Add("Bar", "Foo"); 
map.Add("Bar", "Buz"); 

// Prints 'Foo,Buz' - the comma-separated list of all values 
// associated with the name 'Bar'. 
Console.WriteLine(map["Bar"]); 
+0

謝謝澄清丹尼爾 - 我不經常使用NameValueCollections(故意......) - 乾杯 – mlennox 2010-02-05 00:25:13