CA2244: Keine Initialisierungen indizierter Elemente duplizieren
Eigenschaft | Wert |
---|---|
Regel-ID | CA2244 |
Titel | Keine Initialisierungen indizierter Elemente duplizieren |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Als Vorschlag |
Ursache
Ein Objektinitialisierer verfügt über mehr als einen indizierten Elementinitialisierer mit demselben konstanten Index. Alle bis auf den letzten Initialisierer sind redundant.
Regelbeschreibung
Mit Objektinitialisierern können Sie allen verfügbaren Feldern oder Eigenschaften eines Objekts zum Erstellungszeitpunkt Werte zuweisen, ohne einen Konstruktor aufrufen zu müssen, dem Zeilen mit Zuweisungsanweisungen folgen.
Initialisierer für indizierte Elemente innerhalb von Objektinitialisierern müssen eindeutige Elemente initialisieren. Ein doppelter Index überschreibt eine vorherige Elementinitialisierung.
Behandeln von Verstößen
Um Verstöße zu beheben, entfernen Sie alle redundanten indizierten Elementinitialisierer, die von einem oder mehreren der nachfolgenden Elementinitialisierern überschrieben werden. Der folgende Codeausschnitt zeigt beispielsweise einen Verstoß gegen die Regel sowie einige mögliche Korrekturen (Fixes):
using System.Collections.Generic;
class C
{
public void M()
{
var dictionary = new Dictionary<int, int>
{
[1] = 1, // CA2244
[2] = 2,
[1] = 3
};
}
}
using System.Collections.Generic;
class C
{
public void M()
{
var dictionary = new Dictionary<int, int>
{
[2] = 2,
[1] = 3
};
}
}
using System.Collections.Generic;
class C
{
public void M()
{
var dictionary = new Dictionary<int, int>
{
[1] = 1,
[2] = 2
};
}
}
Tipp
Für diese Regel ist ein Codefix in Visual Studio verfügbar. Um ihn zu nutzen, muss der Cursor auf dem Verstoß platziert und STRG+. (Punkt) gedrückt werden. Wählen Sie aus der Liste der angezeigten Optionen die Option Redundanten Elementinitialisierer entfernen (Remove redundant element initializer) aus.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie die Verstöße gegen diese Regel nicht.