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?

È stato utile?

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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top