【发布时间】:2010-12-01 16:56:11
【问题描述】:
一些 C# 集合具有计数,其中一些具有长度属性。是否有一个拇指规则来找出哪个有哪个以及为什么会有差异?
【问题讨论】:
一些 C# 集合具有计数,其中一些具有长度属性。是否有一个拇指规则来找出哪个有哪个以及为什么会有差异?
【问题讨论】:
我会说一般 Thumbrule 如下:
Count 用于带有
可变长度,即列表(来自
ICollection)Length 是固定长度
集合,即数组或其他
不可变对象,即string。更新:
只是为了详细说明Count 来自ICollection,并不总是表示可变性,例如(根据Greg Beech 的评论)ReadOnlyCollection<T> 具有Count 属性,但它不是可变的,但是它确实实现了ICollection。
也许更准确的经验法则是:
Count 表示某事
实现ICollection
Length 表示不变性。【讨论】:
ReadOnlyCollection<T> 显然是不可变的并且具有固定长度,但它具有 Count 属性。它只适用于任何实现ICollection 的东西,而不管它的其他行为。
如果该类型实现了ICollection,它将具有Count 属性。另一方面,Length 不是标准的,它被定义为 Array 类的属性,因此所有固定大小的数组也将具有它。
【讨论】:
正如其他人所说,Count 来自 ICollection,Length 专门定义在某些类型上,通常是不可变的类型,例如 String 和 Array。
对我来说,Count 意味着可变性,因为某些事物的数量很容易改变。 Length 感觉更加不可变。给定对象的长度通常不会在没有大刀阔斧的情况下发生变化。
另外请记住,在 LINQ 中定义了扩展方法 Count(),它为这两个属性提供了一个通用接口。 LINQ 足够聪明,可以尽可能高效地返回 Count()(即,如果存在 Count 或 Length 属性,它将调用它们),因此它是一个不错的选择。
【讨论】: