我正在將1.1 winforms應用遷移到2.0。因爲泛型,我應該立即改變主要的東西。這裏是我到目前爲止有:轉向仿製藥。
- 替換所有哈希表與一般詞典
- 替換所有的ArrayList與列表<>
- 替換爲所有CollectionBase中派生類:名單<>
任何人那應該立即完成?
THKS, AK
我正在將1.1 winforms應用遷移到2.0。因爲泛型,我應該立即改變主要的東西。這裏是我到目前爲止有:轉向仿製藥。
任何人那應該立即完成?
THKS, AK
應立即進行任何其他方面?
通常,在可能的情況下,將IEnumerable
改爲IEnumerable<T>
。通過切換整個命名空間可以大大地幫助遷移,即在每個文件中刪除System.Collections
,而不是導入System.Collections.Generic
。
此外,在您的代碼中搜索提及object
和/或使用裝箱並考慮這是否仍然適用或應由泛型替代。
由於jalf在評論中提醒我,另一個重要改變是在適用的情況下切換到IComparable
的通用版本。
通用集合由於其表現力而絕對是首選。有一點需要記住,如果從非泛型集合中改變,有時候這種行爲可能會與你期望的不同。例如,在Hashtable與字典上使用索引器對於不存在的值將採取不同的行爲。字典將拋出時,Hashtable將返回null。
Hashtable ht = new Hashtable();
ht.Add(1, "one");
string s1 = ht[1; // s1="one"
string s2 = ht[2]; // s2=null
var dic = new Dictionary<int, string>();
dic.Add(1, "one");
string s1 = dic[1]; // s1="one"
string s2 = dic[2]; // throws KeyNotFoundException
來處理這方面的一個常用方法是使用以下技術:
string s = null;
if (dic.TryGetValue(k, out s))
{
// if we're here, k was found in the dictionary
}
這隻會在運行時出現,因此是值得提前知道。
我不認爲應該立即做任何事情! 1.1代碼的作品,對吧?批發交換到泛型的商業案例是什麼?編譯2.0以下的應用程序,讓它運行並測試。然後,由於需要可以讓您充分利用泛型的新功能,請將這些功能作爲泛型來實現。
查看Bill Wagner的新書More Effective C#。有很多偉大的技巧轉移到泛型。
我不會推薦使用List<T>
而不是CollectionBase
。相反,Collection<T>
爲您提供了可比較的覆蓋。
,除非你已經擁有一套房的單元測試具有優良的代碼覆蓋率,什麼都不用改不必要
否則你只是自尋煩惱,更不用提發明了無用功......
而且同樣,IComparable與IComparable –
jalf
2008-11-29 16:47:39
@jalf,謝謝你,完全忘了這一點。 – 2008-11-29 17:29:00