我正在将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