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

Wex*_*Wex 2 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);
        // }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是,如果属性处于其 DefaultValue,则不调用“X.addAttribute...”行。我假设有某种方法可以获取属性的 DefaultValue,以便我可以进行比较?

出于我的目的,我试图获取由 DefaultValueAttribute 定义的“默认”值。

任何帮助表示赞赏,干杯。

myt*_*thz 5

下面是我用来获取任何运行时类型的默认值的方法,对于非值类型它将返回“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;
}
Run Code Online (Sandbox Code Playgroud)