Поскольку было найдено более одного атрибута, вам необходимо использовать ICustomAttributeProvider.GetCustomAttributes()
. В противном случае метод Attribute.GetCustomAttribute()
выдает AmbiguousMatchException
, поскольку он не знает, какой атрибут выбрать.
Мне нравится оборачивать это как метод расширения, например ::10000
public static IEnumerable<TAttribute> GetAttributes<TAttribute>(this ICustomAttributeProvider provider, bool inherit = false)
where TAttribute : Attribute
{
return provider
.GetCustomAttributes(typeof(TAttribute), inherit)
.Cast<TAttribute>();
}
Называется как:
var attribute = typeof(TransformationItem)
.GetAttributes<XmlArrayItemAttribute>(true)
.Where(attr => !string.IsNullOrEmpty(attr.ElementName))
.FirstOrDefault();
if (attribute != null)
{
string elementName = attribute.ElementName;
// Do stuff...
}