2009-11-19 57 views
1

我正在處理一些序列化例程,我需要一種獲取輸入數組類型的方法。獲取null數組的類型

比方說,我有以下對象:

class myclass { 
    public int foo; 
    public byte[] bar; 
} 

現在我可以用GetType()得到myclass.foo類型。如果我說「myclass.bar = new byte[0]」,我可以推斷bar是使用GetElementType(),HasElementTypeIsArray的字節數組。

但是,如果我從來沒有設置bar,只是將其保留爲null,我無法找到一種方法來獲取對象的類型信息。如果我做myclass.foo.GetType()我所得到的是一個空值。

無論如何推斷這種情況下「酒吧」的類型?

+0

這裏有一個SO相關帖子:http://stackoverflow.com/questions/1120839/net-c-reflection-list-the-fields-of-a字段本身具有字段 – 2009-11-19 15:37:03

回答

5

不存在的對象沒有類型。獲取null參考的類型沒有任何意義。你所尋找的是實際的字段類型。你可以通過反映類型聲明該字段(在這種情況下,myclass)。

4

我覺得應該反思工作 -

typeof(myclass).GetField("bar").FieldType 
+0

這不起作用。你會得到一個空引用異常。 – Joseph 2009-11-19 15:24:34

+3

我沒有得到與該代碼的NullReferenceException,也不應該(除非該字段不存在,在這種情況下Type.GetField(字符串)將返回null,但只要你的名字是正確的,你不應該得到一個NullReferenceException)。 – jonp 2009-11-19 15:28:44

+0

dsolimano的方法應該工作,MSDN的參考有類似的東西:http://msdn.microsoft.com/en-us/library/t0cs7xez.aspx – 2009-11-19 15:34:38