C# CollectionBase与泛型

C# CollectionBase与泛型,c#,.net,generics,C#,.net,Generics,我正在将应用程序从.NET 1.1迁移到.NET 2.0。我是否应该删除CollectionBase的所有用途?如果是这样,迁移的最佳策略是什么?是的,最好的类是System.Collections.Generic。 我通常使用列表 您可以使用以下两种方法之一: A public class MyClass { public List<MyItem> Items; } 这可以删除,因为列表已经为您实现了类型安全的添加功能 有关更多信息,请参阅此链接: 我更喜欢markingra

我正在将应用程序从.NET 1.1迁移到.NET 2.0。我是否应该删除CollectionBase的所有用途?如果是这样,迁移的最佳策略是什么?

是的,最好的类是System.Collections.Generic。
我通常使用列表

您可以使用以下两种方法之一:

A

public class MyClass
{
  public List<MyItem> Items;
}
这可以删除,因为列表已经为您实现了类型安全的添加功能

有关更多信息,请参阅此链接:

我更喜欢markingrams(一种)方法,可能是您自己编写的基类

迁移到泛型还有另一个问题;转化具有一定的病毒效应。你可能会发现在你走完这条路之前是不可能停下来的。如果你认为你要花几个小时做一些泛型,你会经常发现自己花了几天时间做所有的泛型

您可以/应该通过向列表提供新类运算符重载来避免这种情况

public static implicit operator MyClass(List m) 
{
   // code to convert from m to MyClass
}

public static explicit operator List(MyClass m) 
{
    // code to convert from MyClass list
}
这些只是权宜之计。您可以在以后的任何阶段使用“查找用法”来确定哪些地方尚未完全转换。删除所有用法后,可以删除强制类型转换

我通常倾向于将MyClass转换为List显式(这是您不想采用的方式),而将另一个转换为隐式


最好的方法通常是从层的顶部开始,靠近表示层,然后向下工作。(这与您的想法相反。如果您将MyClass转换为List隐式,那么从哪一端开始并不重要)

一般来说,
List
完成了您通常想要的大部分工作。如果你想自定义行为,你应该继承
集合
-这有
虚拟
方法,这样你可以在添加/删除/更新等时调整行为。你不能用
列表
来做这件事,因为没有(uesful)
虚拟
方法。

你能给我举个例子吗。完成。您还想看到其他内容吗?如何处理现有代码,如:public int Add(InstrumentTradeDataRow instTrade){return List.Add(instTrade);}如果要执行选项a。。。确保你实现了ICollection。如果你想改变实现,你应该真正的子类集合,否则没有虚拟方法。。。另外,LINQ仍然提供缺少的功能(查找等)。不幸的是,
集合。Add
不是虚拟的,尽管它确实应该是。@abatishchev-否,但
插入项
是(处理
添加
插入
),正如
设置项
(处理重新分配)一样
public int Add(InstrumentTradeDataRow instTrade) { return List.Add(instTrade); }
public static implicit operator MyClass(List m) 
{
   // code to convert from m to MyClass
}

public static explicit operator List(MyClass m) 
{
    // code to convert from MyClass list
}