【问题标题】:Thumbrule on which collections have the Length or Count property - C#集合具有 Length 或 Count 属性的 Thumbrule - C#
【发布时间】:2010-12-01 16:56:11
【问题描述】:

一些 C# 集合具有计数,其中一些具有长度属性。是否有一个拇指规则来找出哪个有哪个以及为什么会有差异?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    我会说一般 Thumbrule 如下:

    • Count 用于带有 可变长度,即列表(来自 ICollection)
    • Length 是固定长度 集合,即数组或其他 不可变对象,即string

    更新:

    只是为了详细说明Count 来自ICollection,并不总是表示可变性,例如(根据Greg Beech 的评论)ReadOnlyCollection<T> 具有Count 属性,但它不是可变的,但是它确实实现了ICollection

    也许更准确的经验法则是:

    • Count 表示某事 实现ICollection
    • Length 表示不变性。

    【讨论】:

    • 我不会说它适用于具有可变长度的集合; ReadOnlyCollection<T> 显然是不可变的并且具有固定长度,但它具有 Count 属性。它只适用于任何实现ICollection 的东西,而不管它的其他行为。
    • 非常好的点,显然有例外,但 OP 想要一个拇指规则。
    【解决方案2】:

    如果该类型实现了ICollection,它将具有Count 属性。另一方面,Length 不是标准的,它被定义为 Array 类的属性,因此所有固定大小的数组也将具有它。

    【讨论】:

      【解决方案3】:

      正如其他人所说,Count 来自 ICollection,Length 专门定义在某些类型上,通常是不可变的类型,例如 StringArray

      对我来说,Count 意味着可变性,因为某些事物的数量很容易改变。 Length 感觉更加不可变。给定对象的长度通常不会在没有大刀阔斧的情况下发生变化。

      另外请记住,在 LINQ 中定义了扩展方法 Count(),它为这两个属性提供了一个通用接口。 LINQ 足够聪明,可以尽可能高效地返回 Count()(即,如果存在 Count 或 Length 属性,它将调用它们),因此它是一个不错的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        • 2010-09-27
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多