Share via


CA1825: Undvik matrisallokeringar med noll längd

Property Värde
Regel-ID CA1825
Title Undvik matrisallokeringar med noll längd
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

Ett tomt Array utan element allokeras.

Regelbeskrivning

Initiering av en matris med noll längd leder till en onödig minnesallokering. Använd i stället den statiskt allokerade tomma matrisinstansen Array.Empty genom att anropa metoden. Minnesallokeringen delas över alla anrop för den här metoden.

Så här åtgärdar du överträdelser

Om du vill åtgärda en överträdelse ersätter du matrisallokeringen med noll längd med ett anrop till Array.Empty. Följande två kodfragment visar till exempel ett brott mot regeln och hur du åtgärdar den:

class C
{
    public void M1()
    {
        // Violates rule CA1825.
        var a = new int[0];
    }
}
class C
{
    public void M1()
    {
        // Resolves rule CA1825 violation.
        var a = System.Array.Empty<int>();
    }
}

Dricks

En kodkorrigering är tillgänglig för den här regeln i Visual Studio. Om du vill använda den placerar du markören på matrisallokeringen och trycker på Ctrl+. (punkt). Välj Använd Array.Empty i listan med alternativ som visas.

Code fix for CA1825 - use array empty

När du ska ignorera varningar

Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om den extra minnesallokeringen.

Kommentar

Du kan se falska positiva varningar från den här regeln om alla följande gäller:

  • Du använder Visual Studio 2022 version 17.5 eller senare med en äldre version av .NET SDK, dvs. .NET 6 eller tidigare.
  • Du använder analysverktygen från .NET 6 SDK eller en äldre version av analyspaketen, till exempel Microsoft.CodeAnalysis.FxCopAnalyzers.
  • Du använder en matris med noll längd som attributargument, oftast som en params parameter.

Falska positiva identifieringar beror på en icke-bakåtkompatibel ändring i C#-kompilatorn. Överväg att använda en nyare analysator som innehåller korrigeringen för falska positiva varningar. Uppgradera till Microsoft.CodeAnalysis.NetAnalyzers version 7.0.0-preview1.22464.1 eller senare eller använd analysverktygen från .NET 7 SDK.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1825
// The code that's violating the rule is on this line.
#pragma warning restore CA1825

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1825.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även