Frage

Ich habe den Indexer und möchte überprüfen, ob er nicht null ist und ob es sich um ArgumentNulLexception handelt, aber Gendarme setzt die Warnung

InstantiateArgumentExceptionCorctlyRule: Diese Methode löst ArgumentException aus (oder abgeleitet) Ausnahmen, ohne einen vorhandenen Parameternamen anzugeben. Dies kann nützliche Informationen in Entwicklern ausblenden. Fixieren Sie die Ausnahmeparameter, um den richtigen Parameternamen zu verwenden (oder sicherzustellen, dass die Parameter in der richtigen Reihenfolge sind).

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

Wie kann ich meinen Indexer beheben?

War es hilfreich?

Lösung

Nun, es ist im Moment definitiv nicht richtig. Schau dir das an:

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

Das heißt, es wird eine Ausnahme machen, die behauptet, "Schlüssel" sei null, wenn es tatsächlich "Wert" sein sollte.

Der Code sollte also so aussehen:

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

Ich weiß nicht, ob dies die Warnung beheben wird oder nicht, aber es wäre der richtige Code.

Dieser Fehlerbericht deutet darauf hin, dass dies ein Fehler in Gendarme ist, der nicht behoben wurde. Wenn Sie die Warnung nur für diesen Indexer explizit deaktivieren können, ist dies wahrscheinlich der beste Weg. (Ich habe Gendarme nicht verwendet, also weiß ich nicht, ob das machbar ist oder nicht, aber es lohnt sich, es zu untersuchen.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top