2010-12-14 108 views
4

我正在使用基於反射的對象翻譯器。使用反射檢測本機對象

它基本上循環通過對象的屬性,並將值賦給翻譯對象上具有相同名稱/類型的屬性。

ObjectA.Name = 「喬」

翻譯爲:

ObjectB.Name = 「喬」

我需要把一個特殊的情況下,當一個屬性是定製類如:

ObjectA.Address

我希望我可以有屬性類型

propInfo.PropertyType.IsClass 

的IsClass標誌檢測等性能,而且這個標誌也顯得字符串屬性返回true。

是否有另一種方法可以驗證該屬性是非本機類型?

+0

字符串不是值類型 - 它*是*類。如果您試圖確定哪些屬性包含* mutable *對象,那麼祝您好運...(另外,您如何定義「native」類型?) – cdhowie 2010-12-14 22:25:02

+3

除非「native type」==「引用類型」。 – 2010-12-14 22:27:17

+0

「本地」一詞需要從問題/標題中刪除。這很混亂。當我讀「本機」時,我想到了WIN32的結構。 – Amy 2010-12-14 22:59:56

回答

5

我假設你想確定目標類型是不是一個基本的。你也許可以使用TypeCode爲,例如:

public bool IsNotCoreType(Type type) 
{ 
    return (type != typeof(object) && Type.GetTypeCode(type) == TypeCode.Object); 
} 

任何非原始應該返回TypeCode.ObjectType.GetTypeCode的結果,所以我們可以檢查我們得到了與該類型本身不是System.Object

也許這會有幫助嗎?

更新:我改名的方法來IsNotCoreType既包括原語和非原語如StringDateTime等(見下面的評論)。

+2

爲什麼不使用'type.IsPrimitive'? – cdhowie 2010-12-14 22:40:14

+0

^因爲他仍然需要處理'System.String' – 2010-12-14 22:42:22

+0

@Matthew:我明白了。但請注意,字符串**不是**原始類型。 (順便說一句,既不是對象。)所以你的方法名稱是非常具有誤導性的。 – cdhowie 2010-12-14 22:45:03

1

字符串是一個例外,它是.NET中唯一的基本類型,它是一個引用類型。您必須在代碼中考慮此異常,以便檢查IsClass是否爲真,並且類型與System.String不相同。

+0

字符串不是原始類型。 'csharp> typeof(string).IsPrimitive;' - >'false' – cdhowie 2010-12-14 22:38:23