2011-07-06 46 views
2

我有類型比較有趣的問題。我試圖用一個明確的類型比較隱含的類型,來測試,如果事情是任何類型的集合明確類型的隱式類型比較 - C#

var obField = value.GetType().InvokeMember(_stCollectionField, 
           System.Reflection.BindingFlags.GetProperty, 
           null, value, null); 

if (obField.GetType() != typeof(IEnumerable<object>)) 
{ 
    return true; 
} 

的在我的測試,我可以保證obField會變成是對象的集合。然而,我發現,它總是會檢查和return true,在那裏,而不是我希望它跳過這裏面運行(becasue兩個類型相同。)

一點點調試帶給我的obField作爲object {System.Collections.Generic.List<System.DateTime>}類型。

我該怎麼去匹配那種類型?

感謝

+1

如果'obField'是類型'名單'這顯然不是類型的IEnumerable的' '......你又有什麼問題? –

+0

List extends IEnumerable ,no? – AndyBursh

+1

@Andy:是的,但是「==」並不意味着「可以擴展」,它的意思是「is * equal * to」(和「!=」相同)。由於'List '和'IEnumerable '不等於*,因此「!=」的計算結果爲true。 – Heinzi

回答

3

使用Type.IsAssignableFrom,本文使用:Getting all types that implement an interface

例如:

if (typeof(IEnumerable<object>).IsAssignableFrom(obField.GetType())) { ... } 
+1

增加:這隻適用於.NET 4,因爲接口的協方差不可用。 –

+0

工程就像一個魅力,謝謝! – AndyBursh

+0

@Andy:如果你想測試任何類型的集合,那麼你可能比非泛型的IEnumerable接口更好。 – LukeH