为什么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提供的方法是为了简化使用枚举(与列表有重要区别)的工作,这些枚举(通过设计)不提供计数/长度属性。