一些代码:
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'值。
欢迎任何帮助,欢呼。
答案 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;