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 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.