如何获取对象属性的默认值?

时间:2010-02-16 11:28:26

标签: c# default propertyinfo

一些代码:

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);
        // }
    }
}

我要做的不是 - 如果属性位于DefaultValue,则调用'X.addAttribute ...'行。我假设有一些获取属性的DefaultValue的方法,所以我可以进行比较吗?

出于我的目的,我试图获取DefaultValueAttribute定义的'default'值。

欢迎任何帮助,欢呼。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

假设您尝试获取DefaultValue属性,请在GetCustomAttributes个对象上使用PropertyInfo

答案 2 :(得分:-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;