2013-02-11 27 views
0

我使用反射來獲取對象的所有屬性。然後,我需要查看這些屬性的值是否是它們碰巧的任何類型的默認值。以下是我目前的代碼。它抱怨命名空間或類型找不到。這導致我相信它與c#如何隱式類型強制有關。由於我在運行時抓住這個類型,所以不知道如何比較它,或者不太清楚。獲得一個未知類型的默認運行時

我一直希望避免一個開關案例比較類型的名稱,但現在看起來像我唯一的選擇,除非在StackOverflow的輝煌的人可以帶領我在正確的方向。

private bool testPropertyAttribute(PropertyInfo prop) 
    { 
     dynamic value = prop.GetValue(DataObject, null); 
     Type type = prop.PropertyType; 

     /* Test to see if the value is the defult of its type */ 
     return (value == default(prop.PropertyType) 

    } 
+0

['default'只適用於泛型參數。](http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx)此外,您的代碼缺少右括號和分號。 – 2013-02-11 20:11:02

+0

我假設你期望一個非值類型的默認值爲null? – rene 2013-02-11 20:13:17

+0

除非你沒有其他好的選擇,否則你應該避免使用「動態」。使用'var'或'object'作爲'value'的類型在這裏可以很好地工作。 – Bobson 2013-02-11 20:15:12

回答

2

==對於object將始終表示:引用相等。對於參考,默認總是null,所以如果!prop.PropertyType.IsValueType,那麼你只需要一個null檢查。對於價值型,你將拳擊。因此,參考平等將始終報告,除非它們都是Nullable<T>對於某些T,並且都是空的。但是,要獲得「默認」值類型(prop.PropertyType.IsValueType),可以使用Activator.CreateInstance(prop.PropertyType)。請記住==而不是要去做你想要的東西。 Equals(x,y)可能工作得更好。

+0

謝謝。我總是忘記==作爲參考平等。也許這是最後一次。 – Thinmint 2013-02-11 20:50:26

0

你可以做到這一點,你不能依靠==運算符來完成這項工作。你會想使用.Equals或object.ReferenceEquals來做比較。

相關問題