为啥 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 相比,这意味着大小是动态的,并且涉及到一个操作(计数)来知道大小

为什么CollectionList 没有.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#排列?

为啥在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误?

如何找到for循环中数组的长度

用随机数计算数组中出现的次数,没有方法或 C# 中的列表

为啥 C# 数组在 Android 上运行时通过 ref 从 C# 传递到 C++ 库后变为长度 1 但在 Windows 上正常工作?

通过ajax发布的数组在c#方法中为空