我们有一个非常古老的代码库(这实际上并不可怕)。它可以追溯到 .Net 预发布的时候,我怀疑这是造成这些奇怪约定的原因。
无论如何,我们刚刚开始放弃对 .Net 1.1 的支持,并且正在将事物转换为泛型并使用 Linq 和所有有趣的东西。我们代码库中最烦人的模式之一是我们会有类似的东西
private ArrayList mylist;
public IEnumerator MyList
{
get
{
if(mylist==null)
return new EmptyEnumerator.Enumerator;
return mylist.GetEnumerator();
}
}
这种模式特别可怕,因为它阻止我们简单地做foreach(var item in MyList)
,因为 IEnumerator 没有实现 IEnumerable。相反,我们必须这样做:
IEnumerator enumerator=MyList;
while(enumerator.MoveNext())
{
object item=enumerator.Current;
}
因此,对于重构,我们当然希望使用类似ReadOnlyCollection<T>
或IList<T>
类似的东西。然而,要做到这一点,我们必须更新每一个引用MyList
来做:
IEnumerator enumerator=MyList;
至
IEnumerator enumerator=MyList.GetEnumerator();
在某些情况下,我们可以对一个属性有一百多个引用。是否有任何工具可以使这更容易?我们最近得到了 Resharper(不是为了这个问题,只是为了一般用途),但它似乎没有涵盖这种类型的场景。