Pravidla spolehlivosti

Pravidla spolehlivosti podporují knihovnu a spolehlivost aplikací, například správné využití paměti a vlákna. Mezi pravidla spolehlivosti patří:

Pravidlo Popis
CA2000: Uvolňujte objekty před ztrátou oboru Protože může dojít k mimořádné události, která zabrání spuštění destruktoru objektu, měl by být objekt explicitně uvolněn předtím, než se všechny odkazy na něj dostanou mimo rozsah.
CA2002: Nepoužívejte zámky na objekty se slabou identitou Objekt má slabou identitu, pokud k němu lze přímo přistupovat přes hranice aplikační domény. Vlákno, které se pokouší získat zámek na objekt se slabou identitou, může být blokováno jiným vláknem v jiné aplikační doméně, které má zámek na stejný objekt.
CA2007: Nečekejte přímo na úkol Asynchronní metoda čekáTask přímo.
CA2008: Nevytvářejte úkoly bez předání taskScheduler Operace vytvoření nebo pokračování úlohy používá přetížení metody, které neurčovalo TaskScheduler parametr.
CA2009: Nevolejte ToImmutableCollection u hodnoty ImmutableCollection ToImmutable metoda byla zbytečně volána v neměnné kolekci z System.Collections.Immutable oboru názvů.
CA2011: Nepřiřazovat vlastnost v rámci jeho setter Vlastnost byla omylem přiřazena hodnota v rámci svého vlastního přístupového objektu sady.
CA2012: Správné použití hodnotových hodnot HodnotaTasks vrácená z volání členů je určena k přímému očekávání. Pokusy o vícenásobné využití hodnoty ValueTask nebo přímý přístup k výsledku jednoho z nich dříve, než je známo, že je dokončen, může vést k výjimce nebo poškození. Ignorování takové hodnoty ValueTask pravděpodobně značí funkční chybu a může snížit výkon.
CA2013: Nepoužívejte referenceEquals s typy hodnot Při porovnávání hodnot pomocí System.Object.ReferenceEquals, pokud objA a objB jsou typy hodnot, jsou boxovány před jejich předáním metodě ReferenceEquals . To znamená, že i když objA i objB představují stejnou instanci typu hodnoty, ReferenceEquals metoda přesto vrátí false.
CA2014: Nepoužívejte ve smyčce stackalloc. Prostor zásobníku přidělený stackallocem se uvolní pouze na konci volání aktuální metody. Použití ve smyčce může vést k nevázaným růstem zásobníku a případným podmínkám přetečení zásobníku.
CA2015: Nedefinujte finalizační metody pro typy odvozené z memoryManager<T> Přidání finalizátoru do typu odvozeného z MemoryManager<T> může umožnit uvolnění paměti, zatímco je stále používána Span<T>.
CA2016: Předání parametru CancellationToken metodám, které berou jeden CancellationToken Předejte parametr metodám, které ho převedou, aby se zajistilo, že se oznámení o zrušení operace správně rozšíří, nebo CancellationToken.None předat explicitně, aby indikovala úmyslně nerozšíření tokenu.
CA2017: Neshoda počtu parametrů Počet parametrů zadaných v šabloně zprávy protokolování neodpovídá počtu pojmenovaných zástupných symbolů.
CA2018: Argument count , který má Buffer.BlockCopy určovat počet bajtů ke zkopírování Při použití Buffer.BlockCopycount argument určuje počet bajtů, které se mají zkopírovat. Pro argumenty byste měli použít Array.Lengthcount pouze pole, jejichž prvky jsou přesně jeden bajt ve velikosti. byte, sbytea bool pole obsahují prvky, které mají velikost jednoho bajtu.
CA2019: ThreadStatic Pole by neměla používat vložené inicializace Pole s poznámkami ThreadStaticAttribute je inicializováno vloženým nebo explicitně v konstruktoru static (Shared v jazyce Visual Basic).
CA2020: Zabránění změnám chování způsobeným integrovanými operátory IntPtr/UIntPtr Některé předdefinované operátory přidané v .NET 7 se chovají jinak než uživatelem definované operátory v .NET 6 a starších verzích. Některé operátory, které se použily k vyvolání nezaškrtnutého kontextu při přetečení, se už nevyvolají, pokud nejsou zabalené v rámci kontrolovaného kontextu. Některé operátory, které dříve nevyvolaly vrácený kontrolovaný kontext, nyní vyvolány, pokud nejsou zabaleny v nezaškrtnutém kontextu.
CA2021: Nevolejte Enumerable.Cast<T> nebo Enumerable.OfType<T> s nekompatibilními typy Volání Enumerable.Cast<TResult>(IEnumerable) nebo Enumerable.OfType<TResult>(IEnumerable) určuje parametr typu, který není kompatibilní s typem vstupní kolekce.