为了获得dotnet中的子项数量,有时我必须问一个属性Lenght有时我必须要求一个属性Count。.net命名约定:长度和计数之间是否存在语义差异?
是否有任何理由的区别?
例如:
int[] a; if (a.Length == 0) ....
IList<int> b; if (b.Count == 0) ....
注Difference between IEnumerable Count() and Length听起来相似,但没有回答长度之间的语义和Count
为了获得dotnet中的子项数量,有时我必须问一个属性Lenght有时我必须要求一个属性Count。.net命名约定:长度和计数之间是否存在语义差异?
是否有任何理由的区别?
例如:
int[] a; if (a.Length == 0) ....
IList<int> b; if (b.Count == 0) ....
注Difference between IEnumerable Count() and Length听起来相似,但没有回答长度之间的语义和Count
没有语义上的差异。它只是我们应该处理的框架设计细节。
Length
是一个数组属性,Count
上IEnumerable
一个ICollection
一个和Count()
的方法,但除了从那以后,他们的意思是一样的。
也就是说,他们拥有该集合中的项目数量。
注意:在IEnumerable
的情况下,Count()
方法可以(通常会)遍历集合中的所有项目以获取计数。这些属性只会返回一个值。
计数不是IEnumerable的*属性*,它是一个方法。 – 2010-12-09 11:01:49
@Hans - 我正在考虑`IList` – Oded 2010-12-09 11:04:31
我不能引用来源,但我认为.Length是一个固定值,.Count可以更改。
创建数组后,您无法更改数组中的项目数,因此具有.Length。
您可以添加到(或从中删除)List
,以便拥有.Count。
编辑
所以一个.Length
:
虽然.Count
或.Count()
:
在语义上,一个阵列具有元素的恒定数量的,它有一个长度,因此该属性称为长度。列表的元素数量是可变的,如果你想知道有多少元素,你需要计数他们,因此计数名称。
我记得Framework Design Guidelines包含了关于这种差异的注释(明天我会在这里给你一个注释)。我记得设计师认为这是设计中的一个怪癖,因为它对许多开发人员来说没有意义。请记住,一开始没有关于.NET的设计指南和许多。NET API是从Java复制的,包括怪癖。
实际上看到这个:http://stackoverflow.com/questions/300522/count-vs-length-vs-size-in-a-collection – nawfal 2012-04-19 04:27:57