CA1062 : Valider les arguments de méthodes publiquesCA1062: Validate arguments of public methods

TypeNameTypeName ValidateArgumentsOfPublicMethodsValidateArgumentsOfPublicMethods
CheckIdCheckId CA1062CA1062
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Une méthode visible de l’extérieur déréférence l’un de ses arguments de référence sans vérifier si cet argument est null (Nothing en Visual Basic).An externally visible method dereferences one of its reference arguments without verifying whether that argument is null (Nothing in Visual Basic).

Description de la règleRule Description

Tous les arguments de référence passés aux méthodes visibles de l’extérieur doivent être vérifiés null.All reference arguments that are passed to externally visible methods should be checked against null. Si besoin, levez une ArgumentNullException lorsque l’argument est null.If appropriate, throw a ArgumentNullException when the argument is null.

Si une méthode peut être appelée à partir d’un assembly inconnu, car il est déclaré public ou protégé, vous devez valider tous les paramètres de la méthode.If a method can be called from an unknown assembly because it is declared public or protected, you should validate all parameters of the method. Si la méthode est conçue pour être appelée uniquement par les assemblys connus, vous devez rendre la méthode interne et appliquer le InternalsVisibleToAttribute d’attribut à l’assembly qui contient la méthode.If the method is designed to be called only by known assemblies, you should make the method internal and apply the InternalsVisibleToAttribute attribute to the assembly that contains the method.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, validez chaque argument de référence par rapport à null.To fix a violation of this rule, validate each reference argument against null.

Quand supprimer les avertissementsWhen to Suppress Warnings

Vous pouvez supprimer un avertissement de cette règle si vous êtes sûr que le paramètre déréférencé a été validé par un autre appel de méthode dans la fonction.You can suppress a warning from this rule if you are sure that the dereferenced parameter has been validated by another method call in the function.

ExempleExample

L’exemple suivant montre une méthode qui enfreint la règle et une méthode qui satisfait la règle.The following example shows a method that violates the rule and a method that satisfies the rule.

using System;

namespace DesignLibrary
{
   public class Test
   {
       // This method violates the rule.
       public void DoNotValidate(string input)
       {
           if (input.Length != 0)
           {
               Console.WriteLine(input);
           }
       }

       // This method satisfies the rule.
       public void Validate(string input)
       {
           if (input == null)
           {
               throw new ArgumentNullException("input");
           }
           if (input.Length != 0)
           {
               Console.WriteLine(input);
           }
       }
   }
}
Imports System

Namespace DesignLibrary

    Public Class Test

        ' This method violates the rule.
        Sub DoNotValidate(ByVal input As String)

            If input.Length <> 0 Then
                Console.WriteLine(input)
            End If

        End Sub

        ' This method satisfies the rule.
        Sub Validate(ByVal input As String)

            If input Is Nothing Then
                Throw New ArgumentNullException("input")
            End If

            If input.Length <> 0 Then
                Console.WriteLine(input)
            End If

        End Sub

    End Class

End Namespace

ExempleExample

Les constructeurs de copie qui remplissent les propriétés du champ ou qui sont des objets de référence peuvent également violer la règle CA1062.Copy constructors that populate field or properties that are reference objects can also violate the CA1062 rule. La violation se produit parce que l’objet copié est passé au constructeur de copie peut être null (Nothing en Visual Basic).The violation occurs because the copied object that is passed to the copy constructor might be null (Nothing in Visual Basic). Pour résoudre la violation, utilisez une méthode static (Shared en Visual Basic) pour vérifier que l’objet copié n’est pas null.To resolve the violation, use a static (Shared in Visual Basic) method to check that the copied object is not null.

Dans l’exemple suivant Person exemple de classe, le other objet est passé à la Person constructeur de copie peut être null.In the following Person class example, the other object that is passed to the Person copy constructor might be null.

public class Person
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    // Copy constructor CA1062 fires because other is dereferenced
    // without being checked for null
    public Person(Person other)
        : this(other.Name, other.Age)
    {
    }
}

ExempleExample

Suit révisé Person exemple, le other objet est passé au constructeur de copie est vérifié en premier pour la valeur null dans le PassThroughNonNull (méthode).In the following revised Person example, the other object that is passed to the copy constructor is first checked for null in the PassThroughNonNull method.

public class Person
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    // Copy constructor
    public Person(Person other)
        : this(PassThroughNonNull(other).Name,
          PassThroughNonNull(other).Age)
    {
    }

    // Null check method
    private static Person PassThroughNonNull(Person person)
    {
        if (person == null)
            throw new ArgumentNullException("person");
        return person;
    }
}