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ó | CA1861 |
| Cím | Az állandó tömbök elkerülése argumentumként |
| Kategória | Teljesítmény |
| 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
Az állandó literálérték-tömb normál meghívás vagy kiterjesztéses metódushívás útján kerül továbbításra a metódusnak.
Szabály leírása
Az argumentumként átadott állandó tömbök nem lesznek újra felhasználva, ha ismételten meghívják őket, ami azt jelenti, hogy minden alkalommal új tömb jön létre. Ha az átadott tömb nem változik meg a hívott metóduson belül, érdemes lehet kinyerni egy static readonly mezőbe a teljesítmény javítása érdekében.
Megjegyzés
Ha a hívott metódus mutálja az átadott tömböt, vagy ha nem biztos abban, hogy a metódus mutálná-e a tömböt, ne bontsa ki a tömböt mezőre static readonly . Ha így tesz, az törést okozhat. Ebben az esetben jobb, ha inkább elnyomja a figyelmeztetést.
Szabálysértések kijavítása
Az állandó tömböket kinyerjük a static readonly mezőkre, ha az átadott tömb nem módosul a hívott metóduson belül.
Az alábbi példa a szabály megsértését mutatja be:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
Az alábbi példa megmutatja, hogyan lehet kijavítani a szabály megsértését azáltal, hogy az argumentumot egy static readonly mezőbe emeljük ki.
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
Most a tömb értékét fordításkor oldja fel a rendszer, és nem futásidőben, így a kód nagyobb teljesítményt nyújt.
Mikor kell letiltani a figyelmeztetéseket?
A szabály megsértésének mellőzése, ha:
- A hívás csak egyszer fut.
- A tömb a meghívott metóduson belül mutálódhat, vagy nem biztos abban, hogy mutálódik.
- Nem aggódik amiatt, hogy minden egyes meghívás konstans tömb létrehozása teljesítménybeli hatással van.
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 CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
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.CA1861.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.