【问题标题】:C# Why do arrays have Length and collections have Count? [closed]C#为什么数组有长度,集合有计数? [关闭]
【发布时间】:2020-01-01 18:11:39
【问题描述】:

C# 为什么数组和集合的同一个属性(Count 和 Length)的名称不同? 只是让不熟悉这个问题的人头疼。

【问题讨论】:

  • 数组也有LongLength,因为它们可以是多维的,例如
  • 实际上,数组也有一个 Count 属性,因为数组也实现了 ICollection 接口,它有一个 Count 属性。因此,如果您编写一个可以接受数组作为输入的方法,那么您应该这样做,而不是只接受一个数组 T[] 可能接受 ICollection 或 IList 会更好,因为它会使您的方法更加通用通过接受除数组之外的其他类型的集合(数组以及 List 实现这两个接口),额外的好处是您无需考虑 Length 或 Count 是否正确。
  • 数组有 Count“方法”而不是属性,其中列表有 Count 作为属性。
  • 数组没有 Count 属性或方法,LINQ 为数组添加了 Count 扩展...
  • @McGuireV10 要清楚,LINQ 将 Count 扩展方法添加到任何实现 IEnumerable 的包括数组的东西。

标签: c# arrays list count


【解决方案1】:

Length 一般是指固定大小,而Count 一般是指可以改变的内容。 (我说一般是因为有一些例外,例如IReadOnlyList,它不会改变,但仍然有Count,因为它基于更通用的List接口.)

【讨论】:

    【解决方案2】:

    除了@McGuireV10 的回答部分原因是历史原因。 C# 源于 C,在谈论数组和字符串时使用“长度”术语。没有令人信服的理由使用“长度”。

    多年来,集合已被提炼、泛化,并包含各种不同的可数对象,因此“计数”也有意义。

    我认为另一部分是我们如何谈论我们的数据结构。说“数组的长度是多少”比“数组的计数是多少”更自然;前者听起来很自然,而后者则模棱两可(您的意思是数组中的项目数还是*数组的数量”。

    类似地回答“字典中有多少个小部件”?你将用计数而不是长度来表达你的答案。

    对于像字符串这样的东西,从计数长度的角度来考虑并没有错:

    • 此字符串有(计数)40 个字符
    • 此字符串的长度为 40

    【讨论】:

    • 好点,虽然我一直认为“尺寸”比“长度”更自然。
    • Size 也有效,尤其是当您添加多维时。
    • 好吧,@McGuireV10 这更多是语言问题,但感谢您的澄清。 System.Linq 的计数方法是什么?
    • @אריאלפוקסמן 这是一个extension method,来源在这里:github.com/dotnet/runtime/blob/master/src/libraries/System.Linq/…
    • 我认为这个问答中的关键概念是计数和长度都是相关的,因此请同时接受!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2021-10-06
    相关资源
    最近更新 更多