2010-02-16 44 views
1

一些代碼:如何獲取對象屬性的默認值?

foreach (System.Reflection.PropertyInfo pi in myObject.GetType().GetProperties()) 
{ 
    if (pi.CanWrite) 
    { 
     object value = pi.GetValue(Properties, null); 

     // if (value is not default) 
     // { 
     X.addAttribute(pi.Name, value); 
     // } 
    } 
} 

我試圖做的是拒收行「X.addAttribute ......」如果房產是在其默認值。我假設有一些方法可以獲得屬性的DefaultValue,所以我可以做一個比較?

爲了我的目的,我試圖獲得由DefaultValueAttribute定義的'default'值。

任何幫助表示讚賞,歡呼聲。

+0

答案將取決於您如何定義「默認值」。兩個明顯的定義是CLR默認值(對於引用類型爲「null」,對於值類型爲0)或「DefaultValueAttribute」。你能編輯你的問題來澄清你感興趣嗎? –

+0

嗨,道歉;我應該指定。它是通過DefaultValueAttribute定義的默認值。 – Wex

回答

3

假設你正在試圖獲得的默認值屬性,使用您PropertyInfo對象GetCustomAttributes

+0

乾杯。這是我需要的信息,用於我的目的。 – Wex

-3

首先,您必須始終使用您想要的值初始化該字段作爲默認值。

類似

class UnitManager 
    { 
     private int value; 

     [DefaultValue("0")] 
     public int Value 
     { 
     get { return this.value; } 
     set { this.value = value; } 
     } 
    } 

然後只需使用

UnitManager manager = new UnitManager() 

    int startValue = manager.Value; 
4

以下是我用來獲取任何默認值的方法運行時類型它將爲非值類型返回'null',否則它將返回默認值類型(它包括緩存額外的值的值類型):

private static readonly Dictionary<Type, object> DefaultValueTypes 
    = new Dictionary<Type, object>(); 

public static object GetDefaultValue(Type type) 
{ 
    if (!type.IsValueType) return null; 

    object defaultValue; 
    lock (DefaultValueTypes) 
    { 
     if (!DefaultValueTypes.TryGetValue(type, out defaultValue)) 
     { 
      defaultValue = Activator.CreateInstance(type); 
      DefaultValueTypes[type] = defaultValue; 
     } 
    } 

    return defaultValue; 
} 
+0

謝謝,但我的系統使用了一些非價值類型。無論如何,這是一個方便的代碼:)。 – Wex

+0

或者,如果類型在編譯時已知,則可以使用'default'關鍵字。 –

+0

這就是我想要的!謝謝! –