Есть ли способ обнаружить ограничение notnull посредством отражения?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ обнаружить ограничение notnull посредством отражения?

Сообщение Anonymous »

Я пытаюсь применить ограничения к параметрам типа (типа или метода) с помощью отражения. Я сделал это успешно для большинства ограничений (здесь я использую типы для простоты, но приведенные ниже выражения одинаковы для методов, если у вас есть соответствующая информация о методе):
  • Код: Выделить всё

    typeof(Constrained).GetGenericArguments()[0].GenericParameterAttributes
    обнаруживает ограничения, такие как class или new() (соответственно с помощью ReferenceTypeConstraint и DefaultConstructorConstraint)
  • Код: Выделить всё

    typeof(Constrained).GetGenericArguments()[0].GetGenericParameterConstraints()
    обнаруживает ограничения базового типа (возвращает Type[], содержащий ограничения)
  • Иногда это сочетание двух, например, структура NotNullableValueTypeConstraint | DefaultConstructorConstraint и базовый тип System.ValueType
Теперь, когда дело доходит до notnull, я получаю None и пустой Type[] (без базового типа).
Я пытался найти различия в сгенерированном IL, и (насколько я понимаю) есть только NullableAttribute (из System.Runtime.ComplierServices), применяемый либо к универсальному методу, либо к его объявляющему типу, либо к параметру типа, имеющему ограничение notnull, в зависимости от определения типа или метода.
Поскольку местоположение атрибута не всегда одинаковое, и я почти уверен, что существуют и другие способы его появления, я не думаю, что поиск этого атрибута является надежным решением.
Учитывая это два определения Foo (опять же, используя типы для простоты): Как отличить их с помощью отражения?

Подробнее здесь: https://stackoverflow.com/questions/740 ... reflection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»