Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA2009 |
| Cím | Ne hívja meg a ToImmutableCollection függvényt egy nem módosítható Collection értéken |
| Kategória | Megbízhatóság |
| A javítás romboló vagy nem romboló | Nem törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Javaslatként |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
ToImmutable metódust szükségtelenül meghívtak egy névtérből származó nem módosítható gyűjteményre System.Collections.Immutable .
Szabály leírása
System.Collections.Immutable A névtér nem módosítható gyűjteményeket definiáló típusokat tartalmaz. Ez a szabály a következő nem módosítható gyűjteménytípusokat elemzi:
- System.Collections.Immutable.ImmutableArray<T>
- System.Collections.Immutable.ImmutableList<T>
- System.Collections.Immutable.ImmutableHashSet<T>
- System.Collections.Immutable.ImmutableSortedSet<T>
- System.Collections.Immutable.ImmutableDictionary<TKey,TValue>
- System.Collections.Immutable.ImmutableSortedDictionary<TKey,TValue>
Ezek a típusok olyan bővítménymetszeteket határoznak meg, amelyek új, nem módosítható gyűjteményt hoznak létre egy meglévő IEnumerable<T> gyűjteményből.
- ImmutableArray<T> definiálja ToImmutableArray.
- ImmutableList<T> definiálja ToImmutableList.
- ImmutableHashSet<T> meghatározza ToImmutableHashSet.
- ImmutableSortedSet<T> definiálja ToImmutableSortedSet.
- ImmutableDictionary<TKey,TValue> meghatározza a ToImmutableDictionary-t.
- ImmutableSortedDictionary<TKey,TValue> definiálja ToImmutableSortedDictionary.
Ezek a kiterjesztési metódusok azért lettek létrehozva, hogy egy módosítható gyűjteményt módosíthatatlanná alakítsanak át. Előfordulhat azonban, hogy a hívó véletlenül egy nem módosítható gyűjteményt ad át a metódusok bemeneteként. Ez teljesítmény- és/vagy funkcionális problémát jelenthet.
- Teljesítménnyel kapcsolatos probléma: Szükségtelen dobozolás, kicsomagolás és/vagy futásidejű típusellenőrzések egy nem módosítható gyűjteményen.
- Lehetséges funkcionális probléma: A hívó feltételezése szerint egy módosítható gyűjteményen működött, miközben valójában egy nem módosítható gyűjtemény volt.
Szabálysértések kijavítása
A hibák kijavításához távolítsa el a redundáns ToImmutable hívást egy módosíthatatlan gyűjteményből. A következő két kódrészlet például a szabály megsértését és azok kijavítását mutatja:
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
public class C
{
public void M(IEnumerable<int> collection, ImmutableArray<int> immutableArray)
{
// This is fine.
M2(collection.ToImmutableArray());
// This leads to CA2009.
M2(immutableArray.ToImmutableArray());
}
private void M2(ImmutableArray<int> immutableArray)
{
Console.WriteLine(immutableArray.Length);
}
}
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
public class C
{
public void M(IEnumerable<int> collection, ImmutableArray<int> immutableArray)
{
// This is fine.
M2(collection.ToImmutableArray());
// This is now fine.
M2(immutableArray);
}
private void M2(ImmutableArray<int> immutableArray)
{
Console.WriteLine(immutableArray.Length);
}
}
Tipp.
Ehhez a szabályhoz kódjavítás érhető el a Visual Studióban. A használathoz helyezze a kurzort a szabálysértésre, és nyomja le a Ctrl+ billentyűt. (pont). Válassza a Redundáns hívás eltávolítása lehetőséget a megjelenő lehetőségek listájából.
Mikor kell letiltani a figyelmeztetéseket?
Ne tiltsa el a szabály megsértését, hacsak nem aggódik a nem módosítható gyűjtemények szükségtelen lefoglalásai által gyakorolt teljesítményhatás miatt.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2009
// The code that's violating the rule is on this line.
#pragma warning restore CA2009
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2009.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.