如何检测LINQ枚举是否具体化?

时间:2010-05-18 13:30:30

标签: linq linq-to-objects

是否有某种方法可以检测使用LINQ(在本例中为Objects)构建的枚举是否已实现?除了试图检查底层集合的类型?

具体来说,由于enumerable.ToArray()将构建一个新数组,即使底层集合已经是一个数组,我也在寻找一种方法来避免在同一个集合上调用ToArray()两次。

2 个答案:

答案 0 :(得分:1)

枚举不会拥有“基础集合”,它将成为集合。尝试将其转换为一个并使用结果参考:

var coll = enumerable as ICollection<T>;
if (coll != null) {
    // We have a collection!
}

答案 1 :(得分:0)

检查“是IEnumerable”可以做到这一点,没有其他办法。但是,您可以不对返回类型使用“var”声明 - 因为它“隐藏”了您的类型。如果你声明一个显式的IEnumerable,那么编译器会告诉你这是否是返回的内容。