【问题标题】:Array.Length vs Array.Count [duplicate]Array.Length 与 Array.Count [重复]
【发布时间】:2010-12-03 04:18:39
【问题描述】:

可能重复:
count vs length vs size in a collection

在 .NET 中,几乎所有集合都具有 .Count 属性。

有时我想知道是否也将它直接放在Array 上会更好,但不是通过ICollection

这只是你在脑海中为数组设置的例外。

那么在这种情况下是“更正确”还是“更统一”更好?

【问题讨论】:

  • 还应考虑在 .NET 语言中使用类似代码的副作用。在 C# 中错误地使用 Length 会引发错误,因为它要么不可用,要么返回了错误的数据类型。在 PowerShell 中,CountLength 为数组生成相同的结果,但集合对象不会返回 Length 的预期结果。例如,([ordered]@{'a' = 0; 'bc' = 0;'def' = 0;}).Keys.Length 返回 1,2,3 而不是 3。这是因为Length 返回每​​个键的Length 属性列表,即每个字符串的长度。

标签: c# .net arrays


【解决方案1】:

在许多使用一维数组的情况下,它本质上是用作固定大小的列表。

我个人经常将数组声明为 IList,并使用 Count 属性而不是 Length:

IList<string> strings = new string[] { ...};

IList 的另一个有用成员在 Array 中不存在是 Contains() 方法。

【讨论】:

    【解决方案2】:

    如果您使用的是 C# 3.0,则可以使用适用于所有 IEnumerable 实现(包括列表、数组和字典)的 Enumerable.Count() 扩展方法。

    这会导致一些开销,但通常是可以容忍的。

    【讨论】:

    • 如果有任何机会,但是,您正在处理可以执行很多次的关键代码路径,您需要了解 Count() 方法在做什么。如果您正在运行某种 LINQ 查询并且想要计算数据库中有多少项目,它可能会变得很棘手—— Count() 实际上会拉下所有数据并枚举每个元素。对于大型数据集非常低效。
    猜你喜欢
    • 2012-11-21
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2019-11-16
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多