В дополнение к тому, что Рид сказал выше, API MemberInfo.GetCustomAttributes
позволяет вам указать тип фильтра, который влияет на тип возвращаемого массива. То есть, когда вы указываете typeof (MyAttribute)
, на самом деле результат будет MyAttribute[]
(приведен к object[]
).
Теперь, когда вы указываете тип интерфейса IMyAttribute
, массив имеет тип IMyAttribute[]
. И хотя можно разыграть IMyAttribute[]
до object[]
, невозможно разыграть его до Attribute[]
. Так что, по сути, в результате Attribute[]
фильтрация по интерфейсам не сработала бы.
(Кстати, более новые Attribute.GetCustomAttributes
API - которые исправляют разрешение наследования для свойств и событий - имеют Attribute[]
в качестве типа возврата. Это делает фильтрацию по интерфейсам невозможной; вы получаете ArgumentException при попытке передать в тип интерфейса для фильтрации.)