2011-01-31 3 views
0

У меня есть индексатор и хочу проверить, если он не пустой, а если затем бросить ArgumentNullException, но жандарм устанавливает предупредArgumentNullException, индексатор и властвуй Жандарма ошибка

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

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; 
    } 
} 

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

ответ

6

В настоящий момент это определенно не так. Посмотрите на это:

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

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

Так что код должен выглядеть следующим образом:

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

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

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