【发布时间】:2016-05-30 02:37:16
【问题描述】:
这可能是一个愚蠢的问题,为什么队列或列表没有长度属性,而只有计数?同样,为什么数组有 Length 属性?
谢谢
【问题讨论】:
-
@upvoer:这个问题被标记为三个问题的重复
标签: c# arrays list queue content-length
这可能是一个愚蠢的问题,为什么队列或列表没有长度属性,而只有计数?同样,为什么数组有 Length 属性?
谢谢
【问题讨论】:
标签: c# arrays list queue content-length
数组是固定大小的,它们总是通过预先定义大小来初始化。
.Length 在这里很有意义,因为它已修复,无需任何操作即可知道这一点(认为没有计数)
另一方面,与.Count 相比,这意味着大小是动态的,并且涉及到一个操作(计数)来知道大小
为什么
Collection或List没有.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 提供的方法是为了简化不提供(按设计)计数/长度属性的可枚举(与列表有重要区别)的工作。