2011-11-24 133 views
4

我寫了一些代碼:獲取動態類型的類類型?

public static object func() 
    { 
     return new { a = 1, b = 2 }; 
    } 

    Console.WriteLine((func() as dynamic).a); //returns '1'. 

如果我能做到:func() as dynamic所以動態應該是某種引用類型/類的。

我查找它的類類型,但找不到任何(通過反射器)。

它的類型是什麼? (參考類型)?

回答

6

您可以像平常一樣通過GetType()獲取類型。

這是一個匿名類型,它是(作爲實現細節)泛型類型的一種形式。這個類型的名字在c#中是故意不可發音的。

如果你看反射器,可能有一個內部泛型類型的地方以'2結尾(表示2個泛型類型參數),第一個和第二個泛型類型參數有兩個屬性「a」和「b」分別。它是一個類,所以是一個引用類型。

作爲一個說明:

new { a = true, b = 123.45 } 

實際上使用相同的通用但具有不同的泛型類型參數。

另外;使用dynamic不會更改對象 - 它只會改變訪問方式。

+0

as int是Int32的別名,動態是否是xxx的別名? –

+0

@羅伊啊,但事實上**可以** int/Int32(也許盒裝)。實際上沒有任何對象*是動態類型*。就像沒有對象*是IFoo *類型(一個接口)一樣。 **變量**(或表達式)是動態類型的;它只是告訴編譯器如何使用它 - 它不會*改變*實際的對象。 –

+0

什麼是我將使用動態(不是expando,而不是在返回類型的函數中)的真實場景?我知道所有正在與之合作的對象,那麼在一個「新的未知類型」會出現在我的生活中,我將不得不面對的是什麼? –