2

一些代码:

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 定义的“默认”值。

任何帮助表示赞赏,欢呼。

4

3 回答 3

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;
}
于 2010-02-16T11:41:05.497 回答
3

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

于 2010-02-16T11:35:52.767 回答
-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;
于 2010-02-16T11:31:36.470 回答