ArgumentNullException, Indexer e Gendarme Rule Error
-
27-10-2019 - |
Domanda
Ho l'indicizzatore e voglio verificare se non è nullo, e se è allora lanciare argomentazioni, ma Gendarme imposta l'avvertimento
InstantiaTearGumentExceptionCorrectlyRule: Questo metodo lancia eccezioni argomentazioni (o derivata) senza specificare un nome di parametro esistente. Questo può nascondere informazioni utili agli sviluppatori. Ripicca i parametri di eccezione per utilizzare il nome del parametro corretto (o assicurarsi che i parametri siano nell'ordine giusto).
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;
}
}
Come posso riparare il mio indicizzatore?
Soluzione
Beh, al momento non è sicuramente giusto. Guarda questo:
if (key == null || value == null)
{
throw new ArgumentNullException("key");
}
Ciò significa che lancerà un'eccezione che rivendica la "chiave" è nulla quando dovrebbe effettivamente essere "valore".
Quindi il codice dovrebbe apparire così:
if (key == null)
{
throw new ArgumentNullException("key");
}
if (value == null)
{
throw new ArgumentNullException("value");
}
Non so se ciò risolverà l'avvertimento o meno, ma sarebbe il codice corretto.
Questo segnalazione di bug suggerisce che questo è un bug in gendarme che non è stato risolto. Se puoi disabilitare esplicitamente l'avvertimento solo per quell'indicizzatore, è probabilmente il modo migliore per andare. (Non ho usato Gendarme, quindi non so se sia possibile, ma vale la pena esaminarli.)