List(of T)和Collection(of T)之间有什么区别?

16 浏览
0 Comments

List(of T)和Collection(of T)之间有什么区别?

我见过它们在很多相同的方式中被使用,如果我不更好地理解这一点,我担心我即将在设计中走上一条不可逆转的道路。另外,我正在使用.NET。

0
0 Comments

List和Collection之间的区别是什么?

List主要用于应用程序代码内部使用。在编写公共API时,应避免接受或返回List,而应考虑使用超类或集合接口。

Collection是自定义集合的基类(尽管也可以直接使用)。

除非有List的特定功能需要,否则在代码中应使用Collection

以上只是建议。

值得注意的是,使用任何类型的可变对象来封装其自身状态的类型,应避免返回此类类型的对象,除非这些对象具有在被修改时向其所有者通知的方式,或者返回对象的方法的名称清楚地暗示它返回一个新实例。请注意,例如,一个Dictionary>返回List是可以的,因为字典的状态仅封装了其中的列表的标识,而不是其内容。

根据《Framework Design Guidelines, Second Edition》的建议进行整理。

0
0 Comments

问题的出现的原因是因为在.NET中,有两种常用的集合类型:List (of T)和Collection(of T),它们之间有一些区别。

List (of T)是一个可变长度的有序集合,它继承自IList (of T)接口。List (of T)提供了一系列方法和属性,用于在集合中添加、删除、查找和排序元素。它是一个非抽象类,可以直接实例化使用。

Collection (of T)是一个可定制的包装类,它也继承自IList (of T)接口。与List (of T)不同的是,Collection (of T)提供了一些自定义的方法和事件,可以根据需要进行重写和扩展。它的方法默认委托给标准的IList (of T)方法,但可以很容易地进行重写,实现自定义的逻辑。而且,在Collection (of T)中还可以使用事件来处理集合的变化,这在IList中是无法实现的。

所以,问题的解决方法是使用Collection (of T)而不是List (of T)。因为Collection (of T)更容易扩展和定制,可以避免大量的重构工作。同时,使用Collection (of T)还可以实现多态,保证代码的兼容性,不会影响使用其他API的代码。另外,ObservableCollection (of T)是Collection (of T)的一个具体实现,它重写了一些方法以通知关于集合变化的事件。

总之,List (of T)和Collection (of T)在功能上有一些区别,选择使用哪个取决于具体的需求和情况。但从扩展性和灵活性的角度考虑,推荐使用Collection (of T)。

0
0 Comments

在C#中,有三个表示对象集合的概念。按特性递增的顺序,它们是:

- Enumerable(可枚举)- 无序,不可修改

- Collection(集合)- 可添加/删除项

- List(列表)- 允许项有顺序(可以通过索引访问和删除)

Enumerable没有顺序。不能向集合中添加或删除项。甚至不能获取集合中的项数。它严格地让你按顺序访问集合中的每一项。

Collection是可修改的集合。可以向集合中添加和删除对象,也可以获取集合中的项数。但仍然没有顺序,因此无法通过索引访问项,也无法排序。

List是有序的对象集合。可以对列表进行排序,通过索引访问项,通过索引删除项。

事实上,在查看这些接口时,它们是建立在彼此之上的。

当声明变量或方法参数时,应根据需要对对象集合使用IEnumerable、ICollection或IList。

如果只需要对列表中的每个对象执行某些操作,则只需要使用IEnumerable:

void SaveEveryUser(IEnumerable users)
{
    foreach (User u in users)
    {
        // ...
    }
}

您不需要关心用户是保存在List、Collection、Array还是其他任何地方。您只需要IEnumerable接口。

如果需要能够添加、删除或计算集合中的项数,则使用Collection:

ICollection users = new Collection();
users.Add(new User());

如果关心排序顺序,并且需要顺序正确,则使用List:

IList users = FetchUsers(db);

总结一下:

- Enumerable - 访问项,无序,不可修改

- Collection - 可修改(添加、删除、计数)

- List - 可以通过索引访问

根据需要选择相应的概念和类。

0