ArrayList与对象数组相对于Collection of T

rp.*_*rp. 7 c# arrays generics collections

我有一个类Customer(具有典型的客户属性),我需要传递和数据绑定,一个"块"的Customer实例.目前我使用的数组Customer,但我也用CollectionT(和ListT之前,我知道CollectionT).我想用最简洁的方法来使用C#和.NET 3.5传递这个块.

目前,这个阵列Customer对我来说工作得很好.它的数据绑定得很好,似乎也很轻巧.我不需要的东西ListT报价和CollectionT似乎仍然有点小题大做.数组确实要求我提前知道Customer我要添加多少块,但我总是提前知道(例如,在页面中给定行).

我错过了一些基本的东西,还是一堆Customer好的?我缺少一个权衡吗?

另外,我假设CollectionT让老松散类型ArrayList过时.我在那儿吗?

Jon*_*eet 11

是的,Collection<T>(或List<T>更常见的)ArrayList几乎已经过时了.特别是,我相信ArrayList在Silverlight 2中甚至不支持.

在某些情况下,阵列是可以的,但应该被认为是有害的 - 它们有各种缺点.(当然,它们是大多数馆藏实施的核心......)我会详细介绍,但Eric Lippert在链接所引用的文章中做得比我更好.我会在这里总结一下,但这很难做到.真的值得读完整篇文章.


Mit*_*eat 4

没有人提到框架指南建议:不要List<T>在公共 API 中使用:

\n\n
\n

我们不建议在公共 API 中使用 List,原因有两个。

\n\n
    \n
  • List<T>不是为了扩展而设计的。即您不能覆盖任何\n 成员。例如,这意味着List<T>当集合被修改时,从属性返回的对象\n\xe2\x80\x99 无法收到通知。\n Collection<T>允许您覆盖\n SetItem 受保护成员以获取\n \ xe2\x80\x9cnotified\xe2\x80\x9d 当添加新项目\n或更改现有项目时。

  • \n
  • 列表有很多在许多情况下不相关的成员。我们说这List<T>对于公共对象模型来说太\xe2\x80\x9cbusy\xe2\x80\x9d。想象一下 ListView.Items 属性返回 List<T>其丰富的内容。现在,看看实际的ListView.Items返回类型;它\xe2\x80\x99s 更简单,\n 类似于Collection<T>or\n ReadOnlyCollection<T>

  • \n
\n
\n\n

另外,如果您的目标是双向数据绑定,请查看BindingList<T>(需要注意的是它不可“开箱即用”排序!)

\n