Получить атрибут конструктора, как он был объявлен - PullRequest
1 голос
/ 02 апреля 2011

Есть ли способ точно определить, какой конструктор использовался, когда был объявлен атрибут и какие значения были переданы?Например, если метод помечен Obsolete("message") (в отличие от Obsolete("message", true)), могу ли я получить этот конструктор с одним параметром?

Причина, по которой я спрашиваю, заключается в том, что я выполняю генерацию кода и хочу дублироватьатрибуты, которые были объявлены для данного метода или класса в моем сгенерированном классе.GetCustomAttributes() только предоставляет мне тип атрибута и его значения, но если я что-то упускаю, недостаточно информации для дублирования способа объявления атрибута.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

Вы пытались использовать метод CustomAttributeData.GetCustomAttributes для получения подробной информации для конструктора атрибута.Я попытался с атрибутом, украшающим класс, и он работает, как и ожидалось, он должен быть таким же, как и для методов украшения атрибутов и т. Д.Я не совсем уверен в этом, но я считаю, что атрибуты безопасности являются чем-то особенным, поэтому может быть невозможно определить точный используемый конструктор.Однако я не могу вспомнить, откуда у меня появилась эта идея, поэтому не принимайте ее как должное.

0 голосов
/ 02 апреля 2011

Чтобы определить, какой из используемых конструкторов, вам нужно взглянуть на IL-код.

Если я правильно помню, вы найдете пользовательские атрибуты, объявленные как вызов метода конструктора.,Разрешение ConstructorInfo дает вам его параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...