Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Sinix, Вы писали:
S>>Вывод отдельным ответом ибо спойлер.
S> | ибо спойлер |
| S>S>Type-level: 3 attributes
S>Assembly-level: 2 attributes
S>
S>как-то так, да.
|
| |
Почему выводится это, понять можно: дизассемблировав сборку, видно, что повторяющийся атрибут туда просто не попал. (я имею в виду атрибут сборки, на атрибуты класса можно вообще забить).
Также можно упростить код атрибута до
public MyAttribute(string origin)
{
// пусто
}
То есть, мы можем сказать, что метод GetCustomAttributes тут ни при чём, просто компилятор не поместил повторяющийся атрибут в сборку, причём "одинаковость" он определяет только по параметрам конструктора, остальное (свойства) в счёт не идет.
Кстати, можно дизассемблировать сборку, прописать туда "пропавший" атрибут по аналогии и ассемблировать снова. Тогда получим ожидаемый результат.
Так что вопрос сводится к "зачем они так сделали?". Тут могут быть варианты:
Ненамеренно. Баг — самое простое предположение. Но с пятой версии должны были исправить, наверно.
Намеренно. Решили изменить поведение (а как же возможность прописывать несколько значений?). Для чего — не знаю.