Betrouwbaarheidsregels
Betrouwbaarheidsregels ondersteunen bibliotheek- en toepassingsbetrouwbaarheid, zoals het juiste geheugen- en threadgebruik. De betrouwbaarheidsregels zijn onder andere:
Regel | Beschrijving |
---|---|
CA2000: Objecten verwijderen voordat het bereik | Omdat een uitzonderlijke gebeurtenis kan optreden die verhindert dat een object wordt uitgevoerd, moet het object expliciet worden verwijderd voordat alle verwijzingen naar het object buiten het bereik vallen. |
CA2002: Objecten met zwakke identiteit niet vergrendelen | Een object heeft een zwakke identiteit wanneer het rechtstreeks kan worden geopend binnen de grenzen van het toepassingsdomein. Een thread die probeert een vergrendeling te verkrijgen voor een object met een zwakke identiteit, kan worden geblokkeerd door een tweede thread in een ander toepassingsdomein dat een vergrendeling op hetzelfde object heeft. |
CA2007: Wacht niet rechtstreeks op een taak | Een asynchrone methode wacht rechtstreeks op een Task. |
CA2008: Maak geen taken zonder een TaskScheduler- | Een taak maken of vervolgbewerking maakt gebruik van een overbelasting van een methode die geen TaskScheduler parameter opgeeft. |
CA2009: Roep ToImmutableCollection niet aan op een immutableCollection-waarde |
ToImmutable methode werd onnodig aangeroepen voor een onveranderbare verzameling uit System.Collections.Immutable naamruimte. |
CA2011: Wijs geen eigenschap toe binnen de setter- | Aan een eigenschap is per ongeluk een waarde toegewezen binnen een eigen toegangsbeheerset. |
CA2012: ValueTasks correct gebruiken | ValueTasks die worden geretourneerd door aanroepen van leden, zijn bedoeld om direct te worden gewacht. Pogingen om een ValueTask meerdere keren te gebruiken of om rechtstreeks toegang te krijgen tot het resultaat van een waarde voordat bekend is dat het is voltooid, kan leiden tot een uitzondering of beschadiging. Het negeren van een dergelijke ValueTask is waarschijnlijk een indicatie van een functionele bug en kan de prestaties verminderen. |
CA2013: Gebruik ReferenceEquals niet met waardetypen | Bij het vergelijken van waarden met behulp van System.Object.ReferenceEquals, als objA en objB waardetypen zijn, worden ze in het vak geplaatst voordat ze worden doorgegeven aan de methode ReferenceEquals. Dit betekent dat zelfs als zowel objA als objB hetzelfde exemplaar van een waardetype vertegenwoordigen, de methode ReferenceEquals toch onwaar retourneert. |
CA2014: gebruik geen stackalloc in lussen. | Stackruimte toegewezen door een stackalloc wordt alleen aan het einde van de aanroep van de huidige methode vrijgegeven. Het gebruik ervan in een lus kan leiden tot niet-gebonden stackgroei en uiteindelijke stackoverloopvoorwaarden. |
CA2015: Definieer geen finalizers voor typen die zijn afgeleid van MemoryManager<T-> | Het toevoegen van een finalizer aan een type dat is afgeleid van MemoryManager<T> kan toestaan dat geheugen wordt vrijgemaakt terwijl het nog steeds wordt gebruikt door een Span<T>. |
CA2016: de parameter CancellationToken doorsturen naar methoden die één | Stuur de parameter CancellationToken door naar methoden die er een nemen om ervoor te zorgen dat de annuleringsmeldingen van de bewerking correct worden doorgegeven of geef CancellationToken.None expliciet door om aan te geven dat het token opzettelijk niet wordt doorgegeven. |
CA2017: Aantal parameters komt niet overeen | Het aantal parameters dat is opgegeven in de sjabloon voor logboekregistratieberichten komt niet overeen met het aantal benoemde tijdelijke aanduidingen. |
CA2018: Het argument count voor Buffer.BlockCopy moet het aantal bytes opgeven dat moet worden gekopieerd |
Wanneer u Buffer.BlockCopy gebruikt, geeft het argument count het aantal te kopiëren bytes op. Gebruik alleen Array.Length voor het argument count voor matrices waarvan de elementen exact één byte groot zijn.
byte , sbyte en bool matrices hebben elementen die één byte groot zijn. |
CA2019: ThreadStatic velden mogen geen inline-initialisatie- gebruiken |
Een veld met aantekeningen met ThreadStaticAttribute wordt geïnitialiseerd of expliciet in een static (Shared in Visual Basic)-constructor. |
CA2020: Gedragsverandering voorkomen die wordt veroorzaakt door ingebouwde operators van IntPtr/UIntPtr- | Sommige ingebouwde operators die zijn toegevoegd in .NET 7 gedragen zich anders dan de door de gebruiker gedefinieerde operators in .NET 6 en eerdere versies. Sommige operators die voorheen in een niet-gecontroleerde context werpen terwijl overlopen, worden niet meer gegenereerd, tenzij ze zijn verpakt in de gecontroleerde context. Sommige operators die eerder niet in de gecontroleerde context waren gegooid, worden nu gegooid, tenzij ze zijn verpakt binnen een niet-gecontroleerde context. |
CA2021: Roep Enumerable.Cast niet aan<T-> of Enumerable.OfType<T-> met incompatibele typen | Een aanroep van Enumerable.Cast<TResult>(IEnumerable) of Enumerable.OfType<TResult>(IEnumerable) geeft een typeparameter op die niet compatibel is met het type invoerverzameling. |
CA2022: vermijd niet-actieve leesbewerkingen met Stream.Read- | Een aanroep van Stream.Read retourneert mogelijk minder bytes dan aangevraagd, wat resulteert in onbetrouwbare code als de retourwaarde niet wordt gecontroleerd. |
CA2024: Gebruik StreamReader.EndOfStream niet in asynchrone methoden | De eigenschap StreamReader.EndOfStream kan onbedoeld synchrone blokkering veroorzaken wanneer er geen gegevens worden gebufferd. Gebruik in plaats daarvan StreamReader.ReadLineAsync() rechtstreeks, waarmee null wordt geretourneerd bij het bereiken van het einde van de stream. |
Met ons samenwerken op GitHub
De bron voor deze inhoud vindt u op GitHub, waar u ook problemen en pull-aanvragen kunt maken en controleren. Bekijk onze gids voor inzenders voor meer informatie.