Tillförlitlighetsregler
Tillförlitlighetsregler stöder biblioteks- och programtillförlitlighet, till exempel korrekt minnes- och trådanvändning. Tillförlitlighetsreglerna omfattar:
Regel | beskrivning |
---|---|
CA2000: Ta bort objekt innan du förlorar omfånget | Eftersom en exceptionell händelse kan inträffa som hindrar slutföraren av ett objekt från att köras, bör objektet uttryckligen tas bort innan alla referenser till det ligger utanför omfånget. |
CA2002: Lås inte objekt med svag identitet | Ett objekt sägs ha en svag identitet när det kan nås direkt över programdomängränser. En tråd som försöker hämta ett lås på ett objekt som har en svag identitet kan blockeras av en andra tråd i en annan programdomän som har ett lås på samma objekt. |
CA2007: Vänta inte direkt på en uppgift | En asynkron metod väntarTask direkt. |
CA2008: Skapa inte aktiviteter utan att skicka en TaskScheduler | En aktivitetsskapande eller fortsättningsåtgärd använder en metodöverbelastning som inte anger någon TaskScheduler parameter. |
CA2009: Anropa inte ToImmutableCollection på ett ImmutableCollection-värde | ToImmutable -metoden anropades i onödan för en oföränderlig samling från System.Collections.Immutable namnområdet. |
CA2011: Tilldela inte egenskapen i dess setter | En egenskap tilldelades av misstag ett värde i sin egen uppsättningsåtkomstor. |
CA2012: Använd ValueTasks korrekt | ValueTasks som returneras från medlemsanrop är avsedda att inväntas direkt. Försök att använda en ValueTask flera gånger eller att direkt komma åt resultatet innan det är känt att det är klart kan leda till ett undantag eller skada. Att ignorera en sådan ValueTask är sannolikt en indikation på en funktionell bugg och kan försämra prestanda. |
CA2013: Använd inte ReferenceEquals med värdetyper | När du jämför värden med , System.Object.ReferenceEqualsom objA och objB är värdetyper, boxas de innan de skickas till ReferenceEquals metoden. Det innebär att även om både objA och objB representerar samma instans av en värdetyp returnerar ReferenceEquals metoden ändå false. |
CA2014: Använd inte stackalloc i loopar. | Stackutrymme som allokeras av en stackalloc frigörs endast i slutet av den aktuella metodens anrop. Om du använder den i en loop kan det leda till obundna stacktillväxt och eventuella stacköverflödesvillkor. |
CA2015: Definiera inte finalizers för typer som härleds från MemoryManager<T> | Om du lägger till en finalizer i en typ som härletts från MemoryManager<T> kan minnet frigöras medan det fortfarande används av en Span<T>. |
CA2016: Vidarebefordra parametern CancellationToken till metoder som tar en | Vidarebefordra parametern CancellationToken till metoder som tar en för att säkerställa att meddelandena om att åtgärden avbryts sprids korrekt eller skickas CancellationToken.None uttryckligen för att indikera att token avsiktligt inte sprids. |
CA2017: Felmatchning av antal parametrar | Antalet parametrar som anges i mallen för loggningsmeddelande matchar inte antalet namngivna platshållare. |
CA2018: Argumentet count som ska Buffer.BlockCopy anges ska ange hur många byte som ska kopieras |
När du använder Buffer.BlockCopy count anger argumentet antalet byte som ska kopieras. Du bör bara använda Array.Length för count argumentet på matriser vars element är exakt en byte i storlek. byte , sbyte , och bool matriser har element som är en byte i storlek. |
CA2019: ThreadStatic fält bör inte använda infogad initiering |
Ett fält som kommenteras med ThreadStaticAttribute initieras infogat eller explicit i en static (Shared i Visual Basic) konstruktor. |
CA2020: Förhindra beteendeförändring som orsakas av inbyggda operatorer av IntPtr/UIntPtr | Vissa inbyggda operatorer som lagts till i .NET 7 fungerar annorlunda än de användardefinierade operatorerna i .NET 6 och tidigare versioner. Vissa operatorer som brukade kasta i omarkerad kontext när de svämmade över genererar inte längre om de inte omsluts i en markerad kontext. Vissa operatorer som tidigare inte kastade i markerad kontext genererar nu såvida de inte omsluts i en omarkerad kontext. |
CA2021: Anropa inte Enumerable.Cast<T> eller Enumerable.OfType<T> med inkompatibla typer | Ett anrop till Enumerable.Cast<TResult>(IEnumerable) eller Enumerable.OfType<TResult>(IEnumerable) anger en typparameter som inte är kompatibel med typen av indatasamling. |
Samarbeta med oss på GitHub
Källan för det här innehållet finns på GitHub, där du även kan skapa och granska ärenden och pull-begäranden. Se vår deltagarguide för mer information.