Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C#队列或列表只有计数,而数组有长度?_C#_Arrays_List_Queue_Content Length - Fatal编程技术网

为什么C#队列或列表只有计数,而数组有长度?

为什么C#队列或列表只有计数,而数组有长度?,c#,arrays,list,queue,content-length,C#,Arrays,List,Queue,Content Length,这可能是一个愚蠢的问题,为什么队列或列表没有长度属性,而只有计数?同样,为什么数组有长度属性 感谢数组的大小是固定的,它们总是通过预先定义大小来初始化 .Length在这里很有意义,因为它是固定的,不需要任何操作就可以知道这一点(不要考虑计数) 与.Count相比则意味着大小是动态的,需要一个操作(计数)来了解大小 为什么集合或列表没有.Length属性 这确实是一个好问题,部分答案与上面的不同,但它也受到框架设计本身的影响 在框架设计中,集合是可枚举的,任何可枚举的都有一个枚举器 列表或集合的

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


感谢

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

.Length
在这里很有意义,因为它是固定的,不需要任何操作就可以知道这一点(不要考虑计数)

.Count相比
则意味着大小是动态的,需要一个操作(计数)来了解大小

为什么
集合
列表
没有
.Length
属性

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

在框架设计中,集合是
可枚举的
,任何
可枚举的
都有一个
枚举器

列表或集合的计数是通过获取集合的枚举数,然后在递增计数器的同时迭代项来实现的

下面是
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;
}
公共静态整数计数(此IEnumerable源)
{
if(source==null)
{
抛出错误。ArgumentNull(“源”);
}
ICollection is2=源作为ICollection;
如果(is2!=null)
{
返回值为2。计数;
}
int num=0;
使用(IEnumerator enumerator=source.GetEnumerator())
{
while(枚举数.MoveNext())
{
num++;
}
}
返回num;
}

可能重复:@upvoer:此问题被标记为三个问题的重复项一粒盐。有方法
Count()
和属性
Count
。该方法意味着计算,可能会迭代集合以获得其计数(尽管有时甚至可能不是这样)。但是,
ICollection.Count
通常不涉及计算。Linq提供的方法是为了简化使用枚举(与列表有重要区别)的工作,这些枚举(通过设计)不提供计数/长度属性。