CA1043: Ganzzahliges Argument oder Zeichenfolgenargument für Indexer verwenden
TypeName |
UseIntegralOrStringArgumentForIndexers |
CheckId |
CA1043 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Ein öffentlicher oder geschützter Typ enthält einen öffentlichen oder geschützten Indexer mit einem anderen Indextyp als System.Int32, System.Int64, System.Object oder System.String.
Regelbeschreibung
Indexer, d. h. indizierte Eigenschaften, sollten ganzzahlige Typen oder Zeichenfolgentypen für den Index verwenden.Diese Typen werden i. d. R. zum Indizieren von Datenstrukturen verwendet und erhöhen die Brauchbarkeit der Bibliothek.Die Verwendung des Object-Typs sollte auf die Fälle beschränkt werden, in denen der spezielle Integer- oder Zeichenfolgentyp zur Entwurfszeit nicht angegeben werden kann.Wenn der Entwurf andere Typen für den Index erfordert, müssen Sie sich überlegen, ob der Typ einen logischen Datenspeicher darstellt.Wenn er keinen logischen Datenspeicher darstellt, verwenden Sie eine Methode.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu behandeln, ändern Sie den Index in einen Integer- oder Zeichenfolgentyp, oder verwenden Sie eine Methode statt des Indexers.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie eine Warnung dieser Regel erst, nachdem Sie den Bedarf für einen nicht dem Standard entsprechenden Indexer sorgfältig geprüft haben.
Beispiel
Im folgenden Beispiel wird ein Indexer, der einen Int32-Index verwendet, veranschaulicht.
Imports System
Namespace DesignLibrary
Public Class Months
Private month() As String = {"Jan", "Feb", "..."}
Default ReadOnly Property Item(index As Integer) As String
Get
Return month(index)
End Get
End Property
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class Months
{
string[] month = new string[] {"Jan", "Feb", "..."};
public string this[int index]
{
get
{
return month[index];
}
}
}
}
using namespace System;
namespace DesignLibrary
{
public ref class Months
{
array<String^>^ month;
public:
property String^ default[int]
{
String^ get(int index)
{
return month[index];
}
void set(int index, String^ value)
{
month[index] = value;
}
}
Months()
{
month = gcnew array<String^>(12);
month[0] = "Jan";
month[1] = "Feb";
//...;
}
};
}