Argumente von öffentlichen Methoden validieren
Aktualisiert: November 2007
TypeName |
ValidateArgumentsOfPublicMethods |
CheckId |
CA1062 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Nicht unterbrechend |
Ursache
Eine extern sichtbare Methode dereferenziert eines der Verweisargumente, ohne zu überprüfen, ob das Argument null ist (Nothing in Visual Basic).
Regelbeschreibung
Alle an extern sichtbare Methoden übergebenen Verweisargumente sollten auf null überprüft werden. Es sollte ggf. eine System.ArgumentNullException ausgelöst werden, wenn das Argument null ist.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu korrigieren, überprüfen Sie jedes Verweisargument auf null.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Das folgende Beispiel zeigt eine Methode, die gegen die Regel verstößt, und eine Methode, die der Regel entspricht.
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
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);
}
}
}
}
In Visual Studio 2005 hat diese Regel mehrere Einschränkungen. Eine Einschränkung besteht darin, dass
nicht erkannt wird, dass Parameter an eine andere Methode übergeben werden, die die Validierung ausführt.
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 string Method(string value)
{
EnsureNotNull(value);
// Fires incorrectly
return value.ToString();
}
private void EnsureNotNull(string value)
{
if (value == null)
throw new ArgumentNullException("value");
}
Eine weitere Einschränkung besteht darin, dass Kurzschlussoperatoren nicht verstanden werden.
Public Function Method(ByVal value1 As String, ByVal value2 As String) As String
If value1 Is Nothing OrElse value2 Is Nothing Then
Throw New ArgumentNullException()
End If
' Fires incorrectly
Return value1.ToString() + value2.ToString()
End Function
public string Method(string value1, string value2)
{
if (value1 == null || value2 == null)
throw new ArgumentNullException(value1 == null ? "value1" : "value2");
// Fires incorrectly
return value1.ToString() + value2.ToString();
}