2008-11-29 124 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

,除非你已经拥有一套房的单元测试具有优良的代码覆盖率,什么都不用改不必要

否则你只是自寻烦恼,更不用提发明了无用功......