代码之家  ›  专栏  ›  技术社区  ›  Peter Lillevold Rene

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

  •  1
  • Peter Lillevold Rene  · 技术社区  · 14 年前

    是否有某种方法可以检测使用LINQ(对于本例中的对象)生成的可枚举的是否已实现?除了尝试检查基础集合的类型之外?

    具体来说,因为 enumerable.ToArray() 将生成一个新数组,即使基础集合已经是一个数组,我正在寻找一种避免的方法 ToArray() 在同一集合上被调用两次。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Marcelo Cantos    14 年前

    Enumerable不会 “基础集合”,它将 收藏。尝试将其强制转换为一个并使用结果引用:

    var coll = enumerable as ICollection<T>;
    if (coll != null) {
        // We have a collection!
    }
    
        2
  •  0
  •   Brent Arias    14 年前

    检查“is ienumerable”可以做到这一点,没有其他方法。但是,您不能对返回类型使用“var”声明,因为它对您的类型是“隐藏的”。如果声明显式的IEnumerable,那么编译器将告诉您返回的是不是IEnumerable。