sgm*_*ore 0 c# generics .net-2.0
我有一个大型项目,最初是用C#1.1编写的,现在面向C#2.0.有几个类有一些方法,它们采用一个ArrayList参数我想开始将它们List<T>
作为一个参数接受,但是这不能一次完成,所以我需要接受这两个参数.
迁移的主要原因是List<>
对象将被接受为参数,但我也想利用类型安全性.
考虑过了
1)创建重载并复制代码.这样做的好处是允许我将旧样式代码标记为过时,但显然重复代码很糟糕.
2)将参数更改为IEnumerable:这具有使用旧代码和新代码的优点,但不是类型安全的,因为它将接受List<T1>
它应该在哪里List<T2>
3)重写方法以获取List<T>
参数并编写一个瘦包装器,该包装器接受ArrayList参数并将项目复制到new List<T>
,然后调用main方法.这也有一个优点,就是允许我将旧样式代码标记为过时.它会有轻微的性能/ GC命中.
4)创建三个重载.一个私有方法,它采用IEnumerable和两个公共包装器方法(一个用于ArrayList,一个用于List<T>
),它们只调用私有方法.这也有一个优点,就是允许我将旧样式代码标记为过时.除了有三种方法之外,不确定它是否有任何不利之处.
我倾向于4,但我忽略了什么?
绝对使用#2的变体,你在那里射击IEnumerable<T>
而不是List<T>
.对于那些需要更多的人IEnumerable<T>
,你的目标应该是IList<T>
.
对于那些可以迁移到的方法IEnumerable<T>
,您可以在短期内将它们移动到IEnumerable,这样就可以避免需要维护该方法的两个副本.然后,在大多数ArrayLists消失后,您可以轻松完成移动IEnumerable<T>
.
归档时间: |
|
查看次数: |
550 次 |
最近记录: |