Question

Je l'indexeur et que vous voulez vérifier si elle est non nulle, et si elle est jette alors ArgumentNullException, mais définit l'avertissement Gendarme

InstantiateArgumentExceptionCorrectlyRule : Cette méthode renvoie ArgumentException (ou dérivés) exceptions sans spécifier un nom de paramètre existant. Cela peut cacher des informations utiles pour developers.Fix les paramètres d'exception à utiliser le nom correct du paramètre (ou assurez-vous que les paramètres sont dans l'ordre).

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

Comment puis-je réparer mon indexeur?

Était-ce utile?

La solution

Eh bien, il est certainement pas juste au moment. Regardez ceci:

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

Cela signifie qu'il lancera une exception affirmant « clé » est nulle quand elle devrait effectivement être « valeur ».

Ainsi, le code devrait ressembler à ceci:

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

Je ne sais pas si cela va fixer l'avertissement ou non, mais ce serait le bon code.

Ce rapport de bogue l'indique, ce un bogue dans Gendarme qui n'a pas été fixée. Si vous pouvez désactiver explicitement l'avertissement juste pour que indexeur, qui est probablement la meilleure façon d'aller. (Je ne l'ai pas utilisé Gendarme donc je ne sais pas si c'est faisable, mais il vaut la peine de regarder dans.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top