为啥 C# 队列或列表只有计数但数组有长度? [复制]
Posted
技术标签:
【中文标题】为啥 C# 队列或列表只有计数但数组有长度? [复制]【英文标题】:why C# queue or list only has count but array has length? [duplicate]为什么 C# 队列或列表只有计数但数组有长度? [复制] 【发布时间】:2016-05-30 02:37:16 【问题描述】:这可能是一个愚蠢的问题,为什么队列或列表没有长度属性,而只有计数?同样,为什么数组有 Length 属性?
谢谢
【问题讨论】:
可能重复:***.com/a/6646471/1415221 @upvoer:这个问题被标记为三个问题的重复 【参考方案1】:数组是固定大小的,它们总是通过预先定义大小来初始化。
.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 提供的方法是为了简化不提供(按设计)计数/长度属性的可枚举(与列表有重要区别)的工作。以上是关于为啥 C# 队列或列表只有计数但数组有长度? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误?
为啥 C# 数组在 Android 上运行时通过 ref 从 C# 传递到 C++ 库后变为长度 1 但在 Windows 上正常工作?