2009-09-16 62 views
0

有人可以解釋爲什麼會發生這種情況嗎?下面的代碼在vs2008的即時窗口中執行。 prop是由實體框架創建的對象上的Int32屬性(id列)。使用反射比較屬性值的奇怪結果

對象實體和defaultEntity是使用Activator.CreateInstance()創建的;

Convert.ChangeType(prop.GetValue(實體,空),prop.PropertyType) Convert.ChangeType(prop.GetValue(defaultEntity,空),prop.PropertyType) Convert.ChangeType(道具。 GetValue(entity,null),prop.PropertyType)== Convert.ChangeType(prop.GetValue(defaultEntity,null),prop.PropertyType) false

回答

1

我假設你想知道爲什麼第三行輸出false。如果你想知道前兩行打印0的原因,你必須發佈更多的代碼,並告訴我們你的預期。

Convert.ChangeType返回object。因此,當屬性類型實際上是Int32時,它將返回一個盒裝的整數。

您的最後一行是比較兩個盒裝值的參考文獻。有效地你正在做的:

object x = 0; 
object y = 0; 
Console.WriteLine (x == y); // Prints False 

您可以使用Equals代替 - 和靜態object.Equals方法與空引用得心應手科佩斯,應該說是一個問題:

object x = 0; 
object y = 0; 
Console.WriteLine (object.Equals(x, y)); // Prints True 
+0

是的,我最終搞清楚了這一點在同事的幫助下。 .Equals讓我得到我想要的。 有沒有一種方法來檢查,如果該對象是一個字符串或整數沒有明確檢查每個條件? – Brian 2009-09-17 12:44:36

+0

你是什麼意思「檢查每個條件」?你可以使用「is」或者調用GetType()。 – 2009-09-17 13:57:00