.NET命名约定:Length和Count之间有语义上的区别吗?

3
为了获取dotnet中子项的数量,有时我需要查询Lenght属性,有时需要查询Count属性。这种区分有什么原因吗?
示例:
   int[] a; if (a.Length == 0) ....
   IList<int> b; if (b.Count == 0) ....

注意IEnumerable Count()和Length之间的区别听起来相似,但并没有回答Length和Count之间的语义差异。


请参考以下内容:https://dev59.com/2HVC5IYBdhLWcg3wbQbA - nawfal
5个回答

5

我不能引用参考文献,但我认为 .Length 是一个固定值,而 .Count 可以更改。

一旦创建了数组,您无法更改其中的项目数量,因此它具有 .Length。

您可以添加(或删除)List中的内容,因此它具有 .Count。

编辑
因此,.Length

  • 对于该对象不会更改
  • 应涉及快速查找内部值

.Count.Count()

  • 可能会更改该对象
  • 可能涉及对内部项目进行迭代(取决于实现方式)

听起来很合理。对于字符串长度(string.Length)也是同样的道理,因为字符串是不可更改的。Stringbuilder是可变的,但它有Length属性。 - k3b

3

从语义上讲,数组具有恒定数量的元素,因此它有一个长度(length)属性。列表具有可变数量的元素,如果您想知道有多少元素,请统计(count)它们,因此称为 Count。


2
Length是一个数组属性,CountICollection的一个属性,而Count()IEnumerable的一个方法,但除此之外,它们的意思是相同的。
也就是说,它们都表示集合中的项目数量。
注意:对于IEnumerableCount()方法可以(通常会)迭代遍历整个集合以获取计数。而属性则仅返回一个值。

1
Count不是IEnumerable的属性,而是其中的一个方法。 - Hans Kesting
@Hans - 我在想IList - Oded
计数是从ICollection继承给IList的。 - heijp06
我认为在对IEnumerable调用Count()时,它会检查底层类型,即检查它是否为List,以便在迭代项目进行计数之前使用Count属性。 - TWith2Sugars

2

没有语义上的区别,这只是一个我们需要处理的框架设计细节。


1

我记得Framework Design Guidelines中有一条关于这个差异的注释(明天我会引用一下)。我记得设计师们认为这是设计上的怪癖,因为对很多开发者来说没有意义。请记住,在.NET刚开始时并没有设计指南,.NET API的很多部分都是从Java复制过来的,包括这些怪癖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接