采取以下两个代码:
instance.GetType()
.GetCustomAttributes(true)
.Where(item => item is ValidationAttribute);
和
TypeDescriptor.GetAttributes(instance)
.OfType<ValidationAttribute>();
如果该类看起来像:
[RequiredIfOtherPropertyIsNotEmpty("State", "City", ErrorMessage = ErrorDescription.CreateAccount_CityRequiredWithState)]
[RequiredIfOtherPropertyIsNotEmpty("State", "Address1", ErrorMessage = ErrorDescription.CreateAccount_Address1RequiredWithState)]
public class ManagePostModel
{
...
}
其中
RequiredIfOtherPropertyIsNotEmpty
是ValidationAttribute
并具有AllowMultiple = true
。第一个返回两个属性,第二个返回一个属性。
有什么区别会导致这种情况?
最佳答案
从the MSDN page on TypeDescriptor.GetAttributes:
要回答“有什么区别?”这个一般性问题:TypeDescriptor
返回的值可以在运行时扩展,而Type
中的值不能扩展。我链接到的MSDN页面介绍了更多信息。
如果您不需要这种运行时扩展,并且TypeDescriptor
处理多个属性的方式存在问题,那么使用Type.GetCustomAttributes
可能会更好。