我使用反射來遍歷對象的屬性。對於Nullable<>
類型,使用PropertyType
屬性正在返回類型。然而,當我調用屬性getter(通過PropertyType.GetGetMethod().Invoke(obj, new object[0])
或PropertyType.GetValue(obj, null)
,結果的類型是展開的原始的,未Nullable<>
。對於原因的,我寧願去成,我需要把這個結果轉換成其Nullable<>
類型,這將引發InvalidCastException
在這種情況下:C#:動態轉換基元爲Nullable <>
Convert.ChangeType(property.GetValue(obj, null), property.PropertyType);
有另一種方式,以確保該屬性值的類型總是相同屬性的類型
「對於原因的,我寧願不進入」 - 完全取決於你,當然,但你問什麼**就不能存在** - 也許你可以添加一些上下文(更改名稱,如果你喜歡 - 我們不會知道或關心),我們可能會提出一個更好的選擇。 –
如果您確實必須知道,我將從Java到XML的XML編碼器移植到C#中。我不會用另一個取代它們 - 兩者都會存在並得到維護,所以我試圖儘量減少它們之間的差異。我有一個'IDictionary'('IConverter'是我的),它充當屬性類型的屬性值轉換器的註冊表。由於我有這個問題,它打破了'可空'的問題。 –
我使用'MakeGenericType'到所有註冊的兩倍的初始註冊後寫的代碼的簡要位 - 即,對於每個'type',添加相同的轉換器對'typeof運算(可空<>)MakeGenericType(類型)' –