İngilizce dilinde oku

Aracılığıyla paylaş


CA2208: Bağımsız değişken özel durumlarını doğru örnekleyin

TypeName

InstantiateArgumentExceptionsCorrectly

CheckId

CA2208

Kategori

Microsoft.Usage

Değişiklik kesiliyor

Olmayan bölme

Neden

Olası nedenleri aşağıdaki durumlar şunlardır:

  • Varsayılan (parametresiz) kurucusu olan veya türetildiği bir özel durum türü için bir çağrı yapılır [System.ArgumentException].

  • Hatalı dize değişkeni parametreli bir kurucu veya türetildiği bir özel durum türü geçirilir[System.ArgumentException.]

Kural Tanımı

Varsayılan kurucu çağırmak yerine, sağlanacak daha anlamlı bir özel durum iletisi verir yapıcı aşırı birini arayın.Özel durum iletisi hedef geliştirici ve hata durumunu ve nasıl düzeltmek veya özel durum kaçınmak gerektiğini açıkça anlatır.

Birinci ve ikinci dize Kurucular imzalarını ArgumentException ve türetilmiş türlerinden açısından tutarlı değil message ve paramName parametreleri.Bu Kurucular ile doğru dize bağımsız değişkenler olarak adlandırılan emin olun.İmzalar aşağıdaki gibidir:

ArgumentException(string message)

ArgumentException(string message, string paramName)

ArgumentNullException(string paramName)

ArgumentNullException(string paramName, string message)

ArgumentOutOfRangeException(string paramName)

ArgumentOutOfRangeException(string paramName, string message)

DuplicateWaitObjectException(string parameterName)

DuplicateWaitObjectException(string parameterName, string message)

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltmek için bir ileti, bir parametre adı veya her ikisini de götüren bir kurucu çağrısı ve bağımsız değişkenlerin türü için uygun olduğundan emin olun ArgumentException çağrılmakta.

Uyarıları ne zaman

Parametreli bir kurucu doğru dize bağımsız değişkenlerle çağrılırsa uyarı bu kuraldan bastırmak güvenlidir.

Örnek

Aşağıdaki örnek ArgumentNullException türünde bir örnek yanlış başlattığı yapıcı gösterir.

Imports System

Namespace Samples1

    Public Class Book

        Private ReadOnly _Title As String 

        Public Sub New(ByVal title As String)
            ' Violates this rule (constructor arguments are switched)             
            If (title Is Nothing) Then 
                Throw New ArgumentNullException("title cannot be a null reference (Nothing in Visual Basic)", "title")
            End If
            _Title = title
        End Sub 

        Public ReadOnly Property Title()
            Get 
                Return _Title
            End Get 
        End Property 

    End Class 

End Namespace
using System;

namespace Samples1
{    
    public class Book    
    {        
        private readonly string _Title;

        public Book(string title)        
        {            
            // Violates this rule (constructor arguments are switched)             
            if (title == null)                
                throw new ArgumentNullException("title cannot be a null reference (Nothing in Visual Basic)", "title");

            _Title = title;        
        }

        public string Title        
        {            
            get { return _Title; }        
        }
    }
}
using namespace System;

namespace Samples1 
{    
    public ref class Book    
    {
     private: initonly String^ _Title;

    public:
        Book(String^ title)        
        {            
            // Violates this rule (constructor arguments are switched)             
            if (title == nullptr)                
                throw gcnew ArgumentNullException("title cannot be a null reference (Nothing in Visual Basic)", "title");

            _Title = title;        
        }

        property String^ Title        
        {            
            String^ get()            
            {                
                return _Title;            
            }        
        }    
    };
}

Aşağıdaki örnek oluşturucu bağımsız değişkenleri geçerek yukarıdaki ihlali giderir.

Namespace Samples2

    Public Class Book

        Private ReadOnly _Title As String 

        Public Sub New(ByVal title As String)
            If (title Is Nothing) Then 
                Throw New ArgumentNullException("title", "title cannot be a null reference (Nothing in Visual Basic)")
            End If

            _Title = title
        End Sub 

        Public ReadOnly Property Title()
            Get 
                Return _Title
            End Get 
        End Property 

    End Class 

End Namespace
namespace Samples2
{    
    public class Book    
    {        
        private readonly string _Title;

        public Book(string title)        
        {            
            if (title == null)                
                throw new ArgumentNullException("title", "title cannot be a null reference (Nothing in Visual Basic)");

            _Title = title;        }

        public string Title        
        {            
            get { return _Title; }        
        }
    }
}
using namespace System;

namespace Samples2 
{    
    public ref class Book    
    {
     private: initonly String^ _Title;

    public:
        Book(String^ title)        
        {            
            if (title == nullptr)                
                throw gcnew ArgumentNullException(("title", "title cannot be a null reference (Nothing in Visual Basic)"));

            _Title = title;        
        }

        property String^ Title        
        {            
            String^ get()            
            {                
                return _Title;            
            }        
        }    
    };
}