Aracılığıyla paylaş


CA1062: Genel yöntemlerin bağımsız değişkenlerini doğrulayın

TypeName

ValidateArgumentsOfPublicMethods

CheckId

CA1062

Kategori

Microsoft.Design

Değişiklik kesiliyor

Olmayan bölme

Neden

Dışarıdan görünür bir yöntem bağımsız olup yaptırmadan başvuru bağımsız değişkenlerinin biri dereferences null (Nothing Visual Basic).

Kural Tanımı

Dışarıdan görünen yöntemlere iletilen tüm başvuru bağımsız değişkeni karşı denetlenmesi null.Uygunsa, throw bir ArgumentNullException bağımsız değişkeni olduğunda null.

Ortak veya korumalı bildirildiğinden, bilinmeyen bir derlemesinden bir yöntem çağrılabilir, yöntemin tüm parametreleri doğrulamanız gerekir.Yöntem yalnızca bilinen dosyadı çağrılması için tasarlanmıştır, yöntem iç yapmanız ve uygulamak gerekir InternalsVisibleToAttribute yöntemi içeren derleme özniteliği.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltmek için her başvuru bağımsız değişkeni karşı doğrulamak null.

Uyarıları ne zaman

Dereferenced parametresi işlevi için başka bir yöntem çağrısında tarafından doğrulanan eminseniz bu kuraldan uyarı bastırabilirsiniz.

Örnek

Aşağıdaki örnek, kuralını ihlal eden bir yöntem ve kural karşılayan yöntemi gösterir.

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

De Visual Studio 2005, bu kural parametrelerini doğrulama yapan başka bir yönteme geçirilen olduğunu algılamaz.

Public Function Method(ByVal value As String) As String
    EnsureNotNull(value)

    ' Fires incorrectly     
    Return value.ToString()
End Function 

Private Sub EnsureNotNull(ByVal value As String)
    If value Is Nothing Then 
        Throw (New ArgumentNullException("value"))
    End If 
End Sub
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;
    }
}
public string Method(string value)
{
    EnsureNotNull(value);

    // Fires incorrectly     
    return value.ToString();
}

private void EnsureNotNull(string value)
{
    if (value == null)
        throw new ArgumentNullException("value");
}

Alan veya başvuru nesneleri Özellikleri Kopyala Kurucular da CA1062 kuralı ihlal.Kopya yapıcıya iletilen kopyalanan nesneyi olabileceğinden ihlali oluşuyor null (Nothing Visual Basic).İhlali gidermek için kopyalanan nesne null değil denetlemek için statik bir (Visual Basic paylaşılan) yöntemini kullanın.

Aşağıdaki Person sınıf örnek other için geçirilen nesne Person kopya yapıcı olabilir 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)
    {
    }
}

Aşağıdaki yeniden düzenlendi Person örnek, other kopya yapıcıya iletilen nesne için boş değer işaretli ilk PassThroughNonNull yöntemi.

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