【问题标题】:why C# queue or list only has count but array has length? [duplicate]为什么 C# 队列或列表只有计数但数组有长度? [复制]
【发布时间】:2016-05-30 02:37:16
【问题描述】:

这可能是一个愚蠢的问题,为什么队列或列表没有长度属性,而只有计数?同样,为什么数组有 Length 属性?

谢谢

【问题讨论】:

标签: c# arrays list queue content-length


【解决方案1】:

数组是固定大小的,它们总是通过预先定义大小来初始化。

.Length 在这里很有意义,因为它已修复,无需任何操作即可知道这一点(认为没有计数)

另一方面,与.Count 相比,这意味着大小是动态的,并且涉及到一个操作(计数)来知道大小

为什么CollectionList 没有.Length 属性?

这确实是个好问题,部分答案与上面不同,但也受框架设计本身的影响

在框架设计中,一个Collection是Enumerable,任何Enumerable都有一个Enumerator

Lists 或 Collections 的计数通过获取 Collection 的 Enumerator 来工作,然后在递增计数器的同时迭代项目

这是在System.Linq扩展中找到的.Count()方法的实现

public static int Count<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    ICollection<TSource> is2 = source as ICollection<TSource>;
    if (is2 != null)
    {
        return is2.Count;
    }
    int num = 0;
    using (IEnumerator<TSource> enumerator = source.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            num++;
        }
    }
    return num;
}

【讨论】:

  • 一粒盐。有方法Count() 和属性Count。该方法意味着计算,并且可能会迭代集合以获得其计数(尽管有时甚至可能不是这种情况)。但是,ICollection.Count 通常不涉及计算。 Linq 提供的方法是为了简化不提供(按设计)计数/长度属性的可枚举(与列表有重要区别)的工作。
猜你喜欢
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多