.net命名约定:长度和计数之间是否存在语义差异?

时间:2010-12-09 10:58:18

标签: .net

为了获得dotnet中的子项目数量,有时我不得不问一个属性Lenght有时我必须问一个属性Count。

这种区别有什么理由吗?

示例:

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

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

5 个答案:

答案 0 :(得分:5)

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

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

可以添加(或删除)List,因此具有.Count。

修改
所以.Length

  • 此对象不会更改
  • 只需快速查找内部值

.Count.Count()

  • 可能会更改此对象
  • 可能涉及对内部项目的迭代(取决于实现)

答案 1 :(得分:3)

从语义上讲,数组具有恒定数量的元素,它具有 length ,因此该属性称为Length。列表包含可变数量的元素,如果您想知道有多少元素,则需要计算它们,因此计数名称。

答案 2 :(得分:2)

Length是一个数组属性,Count一个ICollection一个Count()方法IEnumerable,但除此之外,它们的含义相同。

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

我记得Framework Design Guidelines包含关于这种差异的注释(我将在明天对它进行讨论)。我记得,设计师认为这是设计中的一个怪癖,因为它对很多开发人员来说没有意义。请记住,在开始时没有.NET的设计指南,并且大部分.NET API都是从Java复制的,包括怪癖。