Ответ 1
Спецификация CLI (ECMA 335) Раздел II, пункт 21, частично заявляет:
В то время как любой пользовательский тип может использоваться как атрибут, соответствие CLS требует, чтобы атрибуты были экземплярами типы, базовый класс которых
System.Attribute
.
Другими словами, язык, не совместимый с CLS, может указывать атрибуты, которые не являются результатом Attribute
, поэтому метод GetCustomAttributes
, вероятно, предназначен для использования таких атрибутов.
Я уверен, что нет такого языка, не совместимого с CLS, и .NET не поддерживает его, но можно себе представить, что дизайнеры Reflection не хотели исключать возможность в будущем.
Что касается вашего второго вопроса, быстрый просмотр исходного кода для System.Reflection
показывает, что вы всегда получаете Attribute[]
назад. Поскольку возвращаемые объекты всегда Attribute[]
, вы можете безопасно их отбросить, но нет гарантии, что он всегда будет работать таким образом.