2010-12-09 25 views
3

为了获得dotnet中的子项数量,有时我必须问一个属性Lenght有时我必须要求一个属性Count。.net命名约定:长度和计数之间是否存在语义差异?

是否有任何理由的区别?

例如:

int[] a; if (a.Length == 0) .... 
    IList<int> b; if (b.Count == 0) .... 

Difference between IEnumerable Count() and Length听起来相似,但没有回答长度之间的语义和Count

+0

实际上看到这个:http://stackoverflow.com/questions/300522/count-vs-length-vs-size-in-a-collection – nawfal 2012-04-19 04:27:57

回答

2

没有语义上的差异。它只是我们应该处理的框架设计细节。

2

Length是一个数组属性,CountIEnumerable一个ICollection一个和Count()的方法,但除了从那以后,他们的意思是一样的。

也就是说,他们拥有该集合中的项目数量。

注意:在IEnumerable的情况下,Count()方法可以(通常会)遍历集合中的所有项目以获取计数。这些属性只会返回一个值。

+1

计数不是IEnumerable的*属性*,它是一个方法。 – 2010-12-09 11:01:49

+0

@Hans - 我正在考虑`IList` – Oded 2010-12-09 11:04:31

5

我不能引用来源,但我认为.Length是一个固定值,.Count可以更改。

创建数组后,您无法更改数组中的项目数,因此具有.Length。

可以添加到(或从中删除)List,以便拥有.Count。

编辑
所以一个.Length

  • 不会为这个对象改变
  • 应该包括内部价值只是一个快速查找

虽然.Count.Count()

  • 也许此对象
  • 改变可能涉及在所述内部件的迭代(取决于实施方式)
3

在语义上,一个阵列具有元素的恒定数量的,它有一个长度,因此该属性称为长度。列表的元素数量是可变的,如果你想知道有多少元素,你需要计数他们,因此计数名称。

1

我记得Framework Design Guidelines包含了关于这种差异的注释(明天我会在这里给你一个注释)。我记得设计师认为这是设计中的一个怪癖,因为它对许多开发人员来说没有意义。请记住,一开始没有关于.NET的设计指南和许多。NET API是从Java复制的,包括怪癖。

相关问题