2008-11-29 99 views
6

我正在將1.1 winforms應用遷移到2.0。因爲泛型,我應該立即改變主要的東西。這裏是我到目前爲止有:轉向仿製藥。

  1. 替換所有哈希表與一般詞典
  2. 替換所有的ArrayList與列表<>
  3. 替換爲所有CollectionBase中派生類:名單<>

任何人那應該立即完成?

THKS, AK

回答

7

應立即進行任何其他方面?

通常,在可能的情況下,將IEnumerable改爲IEnumerable<T>。通過切換整個命名空間可以大大地幫助遷移,即在每個文件中刪除System.Collections,而不是導入System.Collections.Generic

此外,在您的代碼中搜索提及object和/或使用裝箱並考慮這是否仍然適用或應由泛型替代。

由於jalf在評論中提醒我,另一個重要改變是在適用的情況下切換到IComparable的通用版本。

+0

而且同樣,IComparable與IComparable jalf 2008-11-29 16:47:39

+0

@jalf,謝謝你,完全忘了這一點。 – 2008-11-29 17:29:00

3

通用集合由於其表現力而絕對是首選。有一點需要記住,如果從非泛型集合中改變,有時候這種行爲可能會與你期望的不同。例如,在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 
} 

這隻會在運行時出現,因此是值得提前知道。

8

我不認爲應該立即做任何事情! 1.1代碼的作品,對吧?批發交換到泛型的商業案例是什麼?編譯2.0以下的應用程序,讓它運行並測試。然後,由於需要可以讓您充分利用泛型的新功能,請將這些功能作爲泛型來實現。

2

查看Bill Wagner的新書More Effective C#。有很多偉大的技巧轉移到泛型。

0

我不會推薦使用List<T>而不是CollectionBase。相反,Collection<T>爲您提供了可比較的覆蓋。

0

,除非你已經擁有一套房的單元測試具有優良的代碼覆蓋率,什麼都不用改不必要

否則你只是自尋煩惱,更不用提發明了無用功......