2010-05-18 43 views
1

是否有某種方法來檢測是否已經實現了使用LINQ構建的枚舉(對於本例中的對象)?除了試圖檢查底層集合的類型?如何檢測LINQ枚舉是否已實現?

具體而言,因爲enumerable.ToArray()將構建一個新的數組,即使底層集合已經是一個數組,我正在尋找一種避免ToArray()在同一個集合上被調用兩次的方法。

+1

這是您嘗試解決的更大問題的一部分嗎? – R0MANARMY 2010-05-18 13:33:30

+1

@ R0MANARMY - no。 – 2010-05-18 14:02:16

回答

1

該枚舉不會一個「底層集合」,它會集合。嘗試將其轉換爲一個並使用生成的參考:

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

是的,當然,這個解決方案並沒有將我與IEnumerable的特定實現聯繫起來。謝謝! – 2010-05-18 14:05:49

0

檢查「是IEnumerable」可以做到這一點,沒有別的辦法。但是,您可以不使用返回類型的「var」聲明 - 因爲它會將「類型」隱藏起來。如果你聲明瞭一個顯式的IEnumerable,那麼編譯器會讓你知道這是否是返回的內容。

+0

Var不會隱藏任何東西,它只是一個簡寫,所以您不必親自輸入類型。編譯代碼時,類型將是您自己聲明的確切類型。 – Femaref 2010-05-18 15:42:19

+0

我把「藏身」放在引號中是有原因的。如果你聲明瞭你想要的確切類型,如果你沒有達到你想要的類型,編譯器會提供一個錯誤。這就是我所說的「隱藏」。 – 2010-05-18 20:23:39

+0

檢查'IEnumerable'沒有幫助,因爲這是我已經有了。也許我的問題還不夠清楚,但我想要一個'IEnumerable'並檢查它是否已經物化(轉換爲列表或數組)。 – 2010-05-19 06:11:03