Megosztás a következőn keresztül:


CA1861: Az állandó tömbök argumentumként való elkerülése

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 kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A konstans értékek állandó tömbje normál meghívási vagy bővítménymetódus-meghívással továbbítja 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 mutálódik az úgynevezett 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ök kinyerése mezőkre static readonly , ha az átadott tömb nem mutálódik az úgynevezett 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 bemutatja, hogy a szabály megsértésének kijavítása az argumentum mezőre static readonly történő kinyerésével történik.

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 a rendszer fordításkor oldja fel, nem pedig 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álható, vagy nem biztos benne, hogy mutálódna.
  • Nem aggódik amiatt, hogy az egyes meghívásokhoz konstans tömböket hozhat létre.

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.