为什么C#队列或列表只有count但数组有长度?

why C# queue or list only has count but array has length?

本问题已经有最佳答案,请猛点这里访问。

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

谢谢


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

.Length在这里是有意义的,因为它是固定的,不涉及任何操作来知道这一点(不考虑计数)。

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

Why there is no .Length property for a Collection or List?

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

在框架设计中,集合是Enumerable,任何Enumerable都有Enumerator

列表或集合的计数通过获取集合的枚举器工作,然后在递增计数器的同时迭代这些项。

下面是System.Linq扩展中的.Count()方法的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}