C#中Collection和Dictionary的foreach遍歷方式?

Tags: 大學, 型別, 內建,

對於.net Framework中內建的幾種集合類,foreach是一種很方便的遍歷方式:

方法/步驟

1、非泛型&弱型別的Collections(ArrayList,Queue,Stack):

使用object:

ArrayList al = new ArrayList();al.Add("hello");al.Add(1);foreach(object obj in al){ Console.WriteLine(obj.ToString());}

如果確定ArrayList中的型別的話,也可以用這個型別代理,會自動強轉,但若轉換不成功,丟擲InvalidCastException。

ArrayList al = new ArrayList();al.Add("hello");al.Add("world");foreach(string s in al){ Console.WriteLine(s);}

2、強型別的Collections(StringCollection和BitArray),可分別使用string和bool而無需強轉。

非泛型的Dictionaris(Hashtable, SortedList,StringDictionary等):

使用DictionaryEntry:

Hashtable ht = new Hashtable();ht.Add(1, "Hello");ht.Add(2, "World");foreach (DictionaryEntry de in ht){ Console.WriteLine(de.Value);}

特殊的Dictionary(NameValueCollection):

不能直接對NameValueCollection進行foreach遍歷,需要兩級:

NameValueCollection nvc = new NameValueCollection();nvc.Add("a", "Hello");nvc.Add("a", "World");nvc.Add("b", "!");foreach (string key in nvc.AllKeys){ foreach (string value in nvc.GetValues(key)) { Console.WriteLine(value); }}

泛型Collections

List ,Queue ,Stack : 這個好說,foreach T 就可以了。

Dictionary 和SortedList 要使用KeyValuePair :

Dictionary dic = new Dictionary ();dic.Add(1, "Hello");dic.Add(2, "World");foreach(KeyValuePair pair in dic){ Console.WriteLine(pair.Value);}

注意事項

注意 : 在foreach過程中,集合類長度的改變會導致錯誤,因此foreach的迴圈體中不要有對集合類的增減操作。而Dictionary是非執行緒安全的,多執行緒時對其使用foreach可能會引起錯誤,多執行緒時推薦使用非泛型的Hashtable(或者自己lock..)。

相關問題答案