Reguły dotyczące niezawodności

Reguły niezawodności obsługują bibliotekę i niezawodność aplikacji, takie jak prawidłowe użycie pamięci i wątków. Reguły niezawodności obejmują:

Reguła opis
CA2000: Likwiduj obiekty przed utratą zakresu Ze względu na to, że może wystąpić wyjątkowe zdarzenie, które uniemożliwi uruchomienie finalizatora obiektu, obiekty powinny być jawnie usuwane, zanim wszystkie odwołania do niego znajdą się poza zakresem.
CA2002: Nie blokuj obiektów o słabej tożsamości Obiekt ma słabą tożsamość, gdy można uzyskać do niego bezpośredni dostęp poza granicami domeny aplikacji. Wątek, który próbuje uzyskać blokadę na obiekcie o słabej tożsamości, może zostać zablokowany przez drugi wątek w domenie innej aplikacji, która ma blokady dla tego samego obiektu.
CA2007: Nie czekaj bezpośrednio na zadanie Metoda asynchroniczna oczekujeTask bezpośrednio.
CA2008: Nie twórz zadań bez przekazywania elementu TaskScheduler Operacja tworzenia lub kontynuacji zadania używa przeciążenia metody, które nie określa parametru TaskScheduler .
CA2009: Nie należy wywoływać metody ToImmutableCollection na wartości ImmutableCollection ToImmutable metoda została niepotrzebnie wywołana w niezmiennej kolekcji z System.Collections.Immutable przestrzeni nazw.
CA2011: Nie przypisuj właściwości w jej ustawieniu Właściwość została przypadkowo przypisana wartość w ramach własnego zestawu dostępu.
CA2012: Poprawnie użyj wartościTasks WartościZadania zwracane z wywołań składowych mają być bezpośrednio oczekiwane. Próby wielokrotnego korzystania z elementu ValueTask lub bezpośredniego uzyskania dostępu do wyniku, zanim wiadomo, że zostanie ukończone, mogą spowodować wyjątek lub uszkodzenie. Ignorowanie takiej wartościTask jest prawdopodobnie wskazaniem usterki funkcjonalnej i może obniżyć wydajność.
CA2013: Nie używaj właściwości ReferenceEquals z typami wartości Podczas porównywania wartości przy użyciu metody System.Object.ReferenceEquals, jeśli objA i objB są typami wartości, są one w polu przed przekazaniem ReferenceEquals ich do metody . Oznacza to, że nawet jeśli zarówno objA, jak i objB reprezentują to samo wystąpienie typu wartości, ReferenceEquals metoda zwraca jednak wartość false.
CA2014: Nie używaj pętli stackalloc w pętlach. Miejsce na stos przydzielone przez stosalloc jest zwalniane tylko na końcu wywołania bieżącej metody. Użycie go w pętli może spowodować niezwiązane wzrost stosu i ostateczne warunki przepełnienia stosu.
CA2015: Nie należy definiować finalizatorów dla typów pochodzących z klasy MemoryManager<T> Dodanie finalizatora do typu pochodzącego z MemoryManager<T> klasy może pozwolić na zwolnienie pamięci, gdy jest ona nadal używana przez element Span<T>.
CA2016: Przekaż parametr CancellationToken do metod, które przyjmują jeden CancellationToken Przekaż parametr do metod, które przyjmują jeden, aby upewnić się, że powiadomienia anulowania operacji są prawidłowo propagowane lub przekazywane CancellationToken.None jawnie, aby wskazać celowo nie propagację tokenu.
CA2017: Niezgodność liczby parametrów Liczba parametrów podanych w szablonie komunikatu rejestrowania nie jest zgodna z liczbą nazwanych symboli zastępczych.
CA2018: count Argument, który Buffer.BlockCopy ma określać liczbę bajtów do skopiowania W przypadku używania Buffer.BlockCopycount argument określa liczbę bajtów do skopiowania. Argumentu należy używać Array.Lengthcount tylko w przypadku tablic, których elementy są dokładnie jednym bajtem rozmiaru. byte, sbytei bool tablice mają elementy o rozmiarze jednego bajtu.
CA2019: ThreadStatic pola nie powinny używać inline initialization Pole z adnotacjami ThreadStaticAttribute jest inicjowane w tekście lub jawnie w konstruktorze static (Shared w Visual Basic).
CA2020: Zapobieganie zmianom behawioralnym spowodowanym przez wbudowane operatory intPtr/UIntPtr Niektóre wbudowane operatory dodane na platformie .NET 7 zachowują się inaczej niż operatory zdefiniowane przez użytkownika na platformie .NET 6 i starszych wersjach. Niektóre operatory, które były używane do zgłaszania nieznaczonego kontekstu podczas przepełnienia nie są już zgłaszane, chyba że opakowane w kontekście sprawdzonym. Niektóre operatory, które wcześniej nie zgłaszały zaznaczonego kontekstu, zgłaszają teraz, chyba że są opakowane w nieznakowanym kontekście.
CA2021: Nie wywoływanie funkcji Enumerable.Cast<T> lub Enumerable.OfType<T> z niezgodnymi typami Wywołanie metody Enumerable.Cast<TResult>(IEnumerable) lub Enumerable.OfType<TResult>(IEnumerable) określa parametr typu niezgodny z typem kolekcji wejściowej.