采取以下两个代码:

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
{
   ...
}

其中RequiredIfOtherPropertyIsNotEmptyValidationAttribute并具有AllowMultiple = true

第一个返回两个属性,第二个返回一个属性。

有什么区别会导致这种情况?

最佳答案

the MSDN page on TypeDescriptor.GetAttributes:



要回答“有什么区别?”这个一般性问题:TypeDescriptor返回的值可以在运行时扩展,而Type中的值不能扩展。我链接到的MSDN页面介绍了更多信息。

如果您不需要这种运行时扩展,并且TypeDescriptor处理多个属性的方式存在问题,那么使用Type.GetCustomAttributes可能会更好。

10-08 04:57