CA2009: Ne hívja meg a ToImmutableCollection függvényt egy nem módosíthatóCollection értéken
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 kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
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>definiálja.ToImmutableHashSet
- ImmutableSortedSet<T>definiálja.ToImmutableSortedSet
- ImmutableDictionary<TKey,TValue>definiálja.ToImmutableDictionary
- ImmutableSortedDictionary<TKey,TValue>definiálja.ToImmutableSortedDictionary
Ezek a bővítménymetelyek úgy lettek kialakítva, hogy egy mutable-gyűjteményt módosíthatatlan gyűjteménysé alakítsa á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: A nem módosítható gyűjtemények szükségtelen dobozolása, kicsomagolása és/vagy futásideje.
- Lehetséges funkcionális probléma: A hívó azt feltételezte, hogy egy mutable gyűjteményen működik, amikor valójában nem módosítható gyűjtemény volt.
Szabálysértések kijavítása
A szabálysértések kijavításához távolítsa el a redundáns ToImmutable
hívást egy nem módosítható gyűjteményen. 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.
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: