2009-11-02 31 views
4

成立即:的typeof(System.Enum).IsClass ==假

typeof(System.Enum).IsClass == false 

它已經成爲奇怪的是System.Enum也已經.IsValueType == false,但反射表明,它實際上只是一個abstract class

System.Enum是一個引用類型,如System.ValueType和鑄造枚舉值/從System.Enum引用引起的裝箱/拆箱。這裏沒有驚喜。

但是Type這個類的原因是什麼原因不能說出System.Enum的性質? System.Enum類型的反射行爲使其看起來不像參考類型沒有任何特殊之處。

回答

6

這是.net 1.1和2.0的問題。我沒有檢查它在3.0

從MSDN用戶David Bernstein

的System.Enum類型的IsClass屬性返回「假」,即使「System.Enum」,從「System.ValueType」繼承和「typeof(System.ValueType).IsClass」返回「true」(如預期)。與此同時,typeof(System.Enum).IsValueType按預期返回「false」。這種觀察到的行爲似乎與上述明確的文檔相矛盾: 「對於代表Enum和ValueType的Type實例,此屬性返回true。我發現這兩個框架1.1和2.0都是這種情況。

+0

同一問題上的.Net 3.5 – bdukes 2009-11-24 20:31:51

+0

保持在.NET 4.0中 – Custodio 2011-05-17 20:21:57

3

我恰巧最近在CLR4下重新探討了這個問題,並猜測它現在是什麼,現在已經修復了。以下定義:

public struct SomeValueType{} 

public enum SomeEnum 
{ 
    FirstElement 
} 

這個程序

Console.WriteLine(typeof(Enum).IsClass); 
Console.WriteLine(typeof(SomeEnum).IsClass); 

Console.WriteLine(typeof(ValueType).IsClass); 
Console.WriteLine(typeof(SomeValueType).IsClass); 

產生以下結果:

CLR2: False, False, True, False 
CLR4: True, False, True, False 
+0

有趣,THX! – ControlFlow 2011-10-17 21:47:02