2012-03-18 193 views
9

我想通過使用反射來獲取我的類的屬性類型,但它只返回我的唯一的RuntimePropertyInfo - 作爲類型的名稱。使用反射獲取類型

我有對象MyObject來actualData - 它包含了屬性 - 「名稱」作爲字符串和「項目」作爲我型DatumType

當我調試,我可以看到,actualData有2個屬性,第一個是類型字符串,第二個是DatumType,但是當我使用這個:

string typeName = actualData.getType().getProperty("Item").getType().Name - 它返回我RuntimePropertyInfo,不DatumType

你能看到我在做什麼錯?我正在使用C# - .Net 4.0。 非常感謝!

+0

C#區分大小寫。你在問題中包含的內容不能成爲你實際嘗試的內容。 – hvd 2012-03-18 12:03:40

+0

你在開玩笑嗎? :D沒有多數民衆贊成在肯定不是問題 – 2012-03-18 12:09:45

+0

我沒有說這是問題。請注意,我是如何將它作爲評論而不是答案?但是如果你不包含你實際嘗試過的代碼,我們就會猜測你所做的只是修正了大寫,或者還有其他的改變。 – hvd 2012-03-18 12:24:09

回答

13

您正在獲得PropertyInfo對象的類型getProperty()返回。嘗試

string typeName = actualData.getType().getProperty("Item").PropertyType.Name; 

如果你想現在通過PropertyInfo對象分配給該對象的值的類型,你可以撥打:

string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name; 

但在這種情況下,你也可以直接電話諮詢:

string typeName = actualData.Item.GetType().Name; 
+0

它僅返回我 - 「對象」作爲類型的名稱 – 2012-03-18 12:03:14

+1

該屬性可能被定義爲「對象」,但具有分配給它的「DatumType」值。 GetProperty只返回定義的類型,而不是當前值的類型。任何類型都可以被分配給一個'object'類型的屬性。你應該使用'PropertyInfo'並調用'GetValue()'來獲取賦值的類型。 – 2012-03-18 12:05:46

+0

那麼有沒有辦法如何得到這種類型?因爲如果我查看actualData的調試情況 - 我可以看到Item是DatumType,只有反射會給我另外的東西 – 2012-03-18 12:07:14

1

actualData.getType().getProperty("Item") 

檢索PropertyInfo類型的東西。

如果你然後問其類型:

actualData.getType().getProperty("Item").getType() 

你得到你所觀察正是你。

我懷疑這最後getType()沒有必要那麼。

編輯:有人已經低估了這個答案,這是不公平的imho。問題是「你能看到我做錯了什麼嗎?」一個getType太遠的答案是正確的。如果詢問的人知道他做錯了什麼,那麼在PropertyInfo中找到PropertyType很容易。

給那個低估了這個答案的人:請至少在下次給你評價時留下評論。只有當我們相互學習時,Stackoverflow纔有意義,而不僅僅是打擊每個人。

1

GetType()總是返回當前對象的類型,而不是指向的對象。

對您的情況,請考慮使用string typeName = actualData.getType().getProperty("Item").PropertyType.Name

+0

不起作用。例如,如果屬性是Nullable(Of Date),則返回「Nullable'1」。只適用於字符串屬性。 – Pachanka 2016-03-15 10:43:00