Аргументация облегания, ошибка правила индексера и жандарма

StackOverflow https://stackoverflow.com/questions/4852293

Вопрос

У меня есть индексатор, и я хочу проверить, не является ли он не нулевым, и если это так, то выбросите ArmageNullexception, но Gendarme устанавливает предупреждение

CommantiateArgumentExceptionCorrectlyRule: Этот метод выбрасывает ArgySexception (или полученное) исключения без указания существующего имени параметра. Это может скрыть полезную информацию для разработчиков. Почините параметры исключения, чтобы использовать правильное имя параметра (или убедиться, что параметры находятся в правильном порядке).

public override LocalizedString this[string key]
{
    get
    {
        if (key == null)
        {
            throw new ArgumentNullException("key");
        }
        return base[key];
    }
    set
    {
        if (key == null || value == null)
        {
            throw new ArgumentNullException("key");
        }
        base[key] = value;
    }
}

Как я могу исправить свой индексатор?

Это было полезно?

Решение

Ну, это определенно не так. Посмотри на это:

if (key == null || value == null)
{
    throw new ArgumentNullException("key");
}

Это означает, что он бросит исключение, утверждая, что «ключ» является нулевым, когда оно должно быть «ценностью».

Итак, код должен выглядеть так:

if (key == null)
{
    throw new ArgumentNullException("key");
}
if (value == null)
{
    throw new ArgumentNullException("value");
}

Я не знаю, исправят ли это предупреждение или нет, но это будет правильный код.

Этот отчет об ошибке предполагает, что это ошибка в Gendarme, которая не была исправлена. Если вы можете явно отключить предупреждение только для этого индексатора, это, вероятно, лучший способ. (Я не использовал гендарм, поэтому не знаю, осуществится ли это или нет, но стоит изучить.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top