【问题标题】:Does Count realize a IEnumerableCount 是否实现了一个 IEnumerable
【发布时间】:2016-07-04 07:02:13
【问题描述】:

只是一个简单的问题。

计数是否实现了 IEnumerable?假设您有一个方法产生,根据我的理解,该方法在枚举之前一直处于静止状态,但是计数应该需要枚举它才能获得计数?

【问题讨论】:

    标签: c# .net ienumerable


    【解决方案1】:

    是的。 IEnumerable .Count 的来源是:

        public static int Count<TSource>(this IEnumerable<TSource> source) {
            if (source == null) throw Error.ArgumentNull("source");
            ICollection<TSource> collectionoft = source as ICollection<TSource>;
            if (collectionoft != null) return collectionoft.Count;
            ICollection collection = source as ICollection;
            if (collection != null) return collection.Count;
            int count = 0;
            using (IEnumerator<TSource> e = source.GetEnumerator()) {
                checked {
                    while (e.MoveNext()) count++;
                }
            }
            return count;
        }
    

    (source)

    如果 IEnumerable 实际上可以转换为具有“神奇”计数方式的 ICollection,那么它将使用该计数方式而不是迭代。

    【讨论】:

    • 这是否意味着我可以使用它来代替 ToList?
    • 这让计数有点可怕:P
    • 您日常使用的大多数集合都实现了 ICollection,因此可以更快地获取计数。但最好知道像 Count() 这样的 Linq 扩展只是 try 来找到一种快速的方法,如果没有,你最终可能会迭代整个事情.
    • @KaiBrummund 是的,我对大多数系列都知道这一点,只是对枚举和产量的一个奇怪想法让我想到,哦,废话计数可能会非常昂贵。
    • 取决于你真正使用它的目的。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2010-11-24
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多