C #: убедитесь, что параметр имеет атрибут - PullRequest
1 голос
/ 17 мая 2010

У меня есть атрибут, который можно назвать SomeAttribute, и класс, который мне нужен, чтобы убедиться, что классу передан тип, имеющий SomeAttribute. Вот как я это делаю сейчас:

public class Test()
{
    public Test(SomeType obj)
    {
        if(!obj.GetType().IsDefined(typeof(SomeAttribute), false))
        {
            throw new ArgumentException("Errormessage");
        }
    }
}

Но это означает, что я не получаю никаких ошибок во время компиляции, но где-то во время выполнения, если у obj нет атрибута. Есть ли способ указать в объявлении метода, что параметр должен иметь некоторый атрибут? Так что я получаю ошибки, я компилирую время при использовании неправильных параметров, или я должен использовать пустой интерфейс?

Ответы [ 2 ]

3 голосов
/ 17 мая 2010

Нет способа применить атрибут во время компиляции.Возможно, вы захотите пересмотреть свой дизайн - обычно атрибуты больше относятся к метаданным, а не к поведению во время выполнения.

Язык запросов кода NDepend - это инструмент статического анализа, который может , вероятно, обнаруживать нарушения, но если вы еще не используете NDepend, я бы не хотел включатьтолько для этого требования.

Опять же, отсутствие контекста того, что вы хотите сделать - это немного похоже на решение другой половины вашей проблемы .

1 голос
/ 17 мая 2010

Нет, нет никакого способа требовать атрибута - но вы всегда можете написать модульные тесты для сканирования ваших сборок и проверить, были ли применены соответствующие атрибуты - при условии, что вы можете действительно обнаружить это требование.

Хотя это звучит несколько странно - не могли бы вы рассказать подробнее о том, почему вы используете эту схему? Возможно, более подходящим был бы другой подход, например, другой параметр для описания дополнительных данных, которые вас интересуют.

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