长话短说:我做了一个RequireNonDefaultAttribute
(我主要在DTO中使用它作为向导)
[AttributeUsage(AttributeTargets.Property)]
public class RequireNonDefaultAttribute : ValidationAttribute
{
public RequireNonDefaultAttribute()
: base("The {0} field requires a non-default value.")
{
}
public override bool IsValid(object value)
{
return !Equals(value, Activator.CreateInstance(value.GetType()));
}
}
顾名思义,它是一个属性,要求DTO中的属性不为当前类型的默认值。一切都很好。我想为什么不使用==
而不是Equals
方法。由于==
是更多C#样式。所以我将代码转换成
public override bool IsValid(object value)
{
return !(value == Activator.CreateInstance(value.GetType()));
}
无论如何,表达式总是被求值为false
。我可以得到一些解释为什么会发生这种情况吗?