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 |
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.]
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)
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.
Parametreli bir kurucu doğru dize bağımsız değişkenlerle çağrılırsa uyarı bu kuraldan bastırmak güvenlidir.
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;
}
}
};
}