Reguły użycia

Reguły użycia obsługują prawidłowe użycie platformy .NET.

W tym obszarze

Reguła opis
CA1801: Przejrzyj nieużywane parametry Podpis metody zawiera parametr, który nie jest używany w jej treści.
CA1816: Wywołaj poprawnie metodę GC.SuppressFinalize Metoda, która jest implementacją metody Dispose, nie wywołuje GC.SuppressFinalizemetody lub metody, która nie jest implementacją Dispose wywołań GC.SuppressFinalize; lub wywołania GC.SuppressFinalize metody i przekazuje coś innego niż this (Me w Visual Basic).
CA2200: Zgłoś ponownie wyjątek, aby zachować szczegóły stosu Wyjątek jest zgłaszany ponownie i jest on jawnie określony w instrukcji „throw”. Jeśli wyjątek jest zgłaszany ponownie przez określenie wyjątku w instrukcji „throw”, lista wywołań metod między pierwotną metodą, która zgłosiła wyjątek, a bieżącą zostanie utracona.
CA2201: Nie wywołuj zastrzeżonych typów wyjątku Sprawia to, że oryginalny błąd jest trudny do wykrycia i debugowania.
CA2207: Pola statyczne typu wartości inicjuj bezpośrednio Typ wartości deklaruje jawny, statyczny konstruktor. Aby naprawić naruszenie tej zasady, zainicjuj wszystkie dane statyczne, gdy jest on zadeklarowany, i usuń konstruktor statyczny.
CA2208: Poprawnie twórz wystąpienia wyjątków argumentów Wywołanie odnosi się do domyślnego (bezparametrowego) konstruktora typu wyjątku, który jest elementem ArgumentException lub od niego pochodzi, albo niepoprawny argument ciągu jest przekazywany do sparametryzowania konstruktora typu wyjątku lub pochodzi od elementu ArgumentException.
CA2211: Pola, które nie są stałe, nie powinny być widoczne Pola statyczne, które nie są stałymi ani tylko do odczytu, nie są bezpieczne wątkowo. Dostęp do takiego pola musi być starannie kontrolowany i wymaga zaawansowanych technik programowania do synchronizowania dostępu do obiektu klasy.
CA2213: Pola możliwe do likwidacji powinny zostać zlikwidowane Typ implementujący System.IDisposable deklaruje pola, które są typami, które również implementują IDisposableelement . Dispose Metoda pola nie jest wywoływana przez Dispose metodę typu deklarowanego.
CA2214: Nie wywołuj metod, które można przesłonić, w konstruktorach Gdy konstruktor wywołuje metodę wirtualną, możliwe, że konstruktor dla wystąpienia, które wywołuje metodę, nie został wykonany.
CA2215: Metody Dispose powinny wywoływać metodę Dispose klasy podstawowej Jeśli typ dziedziczy z typu jednorazowego, musi wywołać Dispose metodę typu podstawowego z własnej Dispose metody.
CA2216: Typy możliwe do likwidacji powinny deklarować finalizator Typ implementujący System.IDisposableelement i zawiera pola sugerujące użycie niezarządzanych zasobów, nie implementuje finalizatora zgodnie z opisem w temacie Object.Finalize.
CA2217: Nie oznaczaj wyliczeń za pomocą atrybutu FlagsAttribute Zewnętrznie widoczne wyliczenie jest oznaczone elementem FlagsAttributei ma co najmniej jedną wartość, która nie ma uprawnień dwóch lub kombinacji innych zdefiniowanych wartości w wyliczenie.
CA2218: Przesłoń metodę GetHashCode przy przesłanianiu metody Equals Przesłonięć System.Object.Equals typu publicznego, ale nie zastępuje System.Object.GetHashCodeelementu .
CA2219: Nie zgłaszaj wyjątków w klauzulach wyjątku Kiedy wyjątek jest zgłaszany w klauzuli „finally” lub „fault”, nowy wyjątek ukrywa aktywny wyjątek. Gdy wyjątek jest zgłaszany w klauzuli filtru, środowisko uruchomieniowe dyskretnie przechwytuje wyjątek. Sprawia to, że oryginalny błąd jest trudny do wykrycia i debugowania.
CA2224: Przesłaniaj metodę Equals w przypadku przeciążania operacji równości operatorów Typ publiczny implementuje operator równości, ale nie zastępuje System.Object.Equalselementu .
CA2225: Przeciążenia operatora mają nazwane alternatywy Wykryto przeciążony operator i nie znaleziono metody alternatywnej o oczekiwanej nazwie. Nazwany element członkowski alternatywny zapewnia dostęp do tych samych funkcji co operator i jest udostępniany deweloperom, którzy programują w językach, które nie obsługują przeciążonych operatorów.
CA2226: Operatory powinny mieć symetryczne przeciążenia Typ implementuje operator równości lub nierówności i nie implementuje odwrotnego operatora.
CA2227: Właściwości kolekcji powinny być tylko do odczytu Właściwość zapisywalnej kolekcji pozwala użytkownikowi zastąpić kolekcję inną kolekcją. Właściwość tylko do odczytu uniemożliwia zastępowanie kolekcji, ale nadal umożliwia ustawienie poszczególnych członków.
CA2229: Zaimplementuj konstruktory serializacji Aby naprawić naruszenie tej zasady, należy zaimplementować konstruktora serializacji. Dla zamkniętej klasy należy ustawić konstruktor prywatny; w przeciwnym razie powinien być chroniony.
CA2231: Przeciążaj operator równości w przypadku przesłaniania metody ValueType.Equals Przesłonięcia Object.Equals typu wartości, ale nie implementuje operatora równości.
CA2234: Przekaż obiekty System.Uri zamiast ciągów Wykonano wywołanie do metody, która ma parametr typu ciąg, którego nazwa zawiera „uri”, „URI”, „urn”, „URN”, „url” lub „URL”. Deklarowany typ metody zawiera odpowiednie przeciążenie metody, które ma System.Uri parametr.
CA2235: Oznacz wszystkie pola nieprzeznaczone do serializacji Pola wystąpienia typu, który nie może być serializowany, jest zadeklarowany w typie, który jest możliwy do serializacji.
CA2237: Oznacz typy ISerializable za pomocą atrybutu SerializableAttribute Aby można było rozpoznać przez środowisko uruchomieniowe języka wspólnego jako możliwe do serializacji, typy muszą być oznaczone atrybutem SerializableAttribute, nawet jeśli typ używa niestandardowej procedury serializacji poprzez implementację interfejsu ISerializable .
CA2241: Określ poprawne argumenty dla metod formatowania Argument formatu przekazany do String.Format nie zawiera elementu formatu odpowiadającego każdemu argumentowi obiektu ani odwrotnie.
CA2242: Poprawnie testuj nie-liczby (NaN) To wyrażenie sprawdza wartość względem Single.Nan wartości lub Double.Nan. Użyj polecenia Single.IsNan(Single) lub Double.IsNan(Double) , aby przetestować wartość.
CA2243: Analiza literałów typu string atrybutów powinna przebiegać poprawnie Parametr literału ciągu atrybutu nie analizuje poprawnie adresu URL, identyfikatora GUID ani wersji.
CA2244: Nie duplikuj inicjalizacji indeksowanych elementów Inicjator obiektu ma więcej niż jeden indeksowany inicjator elementu z tym samym indeksem stałej. Wszystkie oprócz ostatniego inicjatora są nadmiarowe.
CA2245: Nie przypisuj właściwości do samej siebie Właściwość została przypadkowo przypisana do siebie.
CA2246: Nie przypisuj symbolu i jego elementu członkowskiego w tej samej instrukcji Przypisywanie symbolu i jego elementu członkowskiego, czyli pola lub właściwości, w tej samej instrukcji nie jest zalecane. Nie jest jasne, czy dostęp do elementu członkowskiego miał używać starej wartości symbolu przed przypisaniem lub nowej wartości z przypisania w tej instrukcji.
CA2247: Argument przekazany do konstruktora TaskCompletionSource powinien mieć wyliczenie TaskCreationOptions zamiast wyliczenia TaskContinuationOptions Element TaskCompletionSource zawiera konstruktory, które przyjmują obiekty TaskCreationOptions kontrolujące bazowe zadanie, oraz konstruktory, które przyjmują stan obiektu przechowywany w zadaniu. Przypadkowe przekazanie elementu TaskContinuationOptions zamiast taskCreationOptions spowoduje wywołanie traktujące opcje jako stan.
CA2248: Podaj poprawny argument "wyliczenie" do "Enum.HasFlag" Typ wyliczenia przekazany jako argument do HasFlag wywołania metody różni się od typu wyliczenia wywołującego.
CA2249: Rozważ użycie ciągu.Contains zamiast String.IndexOf Wywołania, w string.IndexOf których wynik jest używany do sprawdzania obecności lub braku podciągów może zostać zastąpiony przez string.Contains.
CA2250: Użyj ThrowIfCancellationRequested ThrowIfCancellationRequested automatycznie sprawdza, czy token został anulowany, i zgłasza OperationCanceledException błąd, jeśli został on anulowany.
CA2251: Użyj za pośrednictwem String.EqualsString.Compare Jest to zarówno jaśniejsze, jak i prawdopodobnie szybsze, String.Equals zamiast porównywać wynik z String.Compare zera.
CA2252: Wyrażanie zgody na funkcje w wersji zapoznawczej Wybierz funkcje w wersji zapoznawczej przed użyciem interfejsów API w wersji zapoznawczej.
CA2253: Nazwane symbole zastępcze nie powinny być wartościami liczbowymi Nazwane symbole zastępcze w szablonie komunikatu rejestrowania nie powinny składać się tylko z znaków liczbowych.
CA2254: Szablon powinien być wyrażeniem statycznym Szablon komunikatu rejestrowania nie powinien różnić się między wywołaniami.
CA2255: Atrybut ModuleInitializer nie powinien być używany w bibliotekach Inicjatory modułów mają być używane przez kod aplikacji, aby upewnić się, że składniki aplikacji są inicjowane przed rozpoczęciem wykonywania kodu aplikacji.
CA2256: Wszystkie elementy członkowskie zadeklarowane w interfejsach nadrzędnych muszą mieć implementację w interfejsie atrybutu DynamicInterfaceCastableImplementation Typy przypisywane za pomocą DynamicInterfaceCastableImplementationAttribute funkcji działają jako implementacja interfejsu dla typu, który implementuje IDynamicInterfaceCastable typ. W związku z tym musi zapewnić implementację wszystkich elementów członkowskich zdefiniowanych w odziedziczonych interfejsach, ponieważ typ implementujący IDynamicInterfaceCastable nie dostarczy ich w przeciwnym razie.
CA2257: Składowe zdefiniowane w interfejsie z elementem "DynamicInterfaceCastableImplementationAttribute" powinny być "statyczne" Ponieważ typ implementujący IDynamicInterfaceCastable może nie implementować interfejsu dynamicznego w metadanych, wywołania elementu członkowskiego interfejsu wystąpienia, który nie jest jawną implementacją zdefiniowaną na tym typie, mogą zakończyć się niepowodzeniem w czasie wykonywania. Oznacz nowe elementy członkowskie static interfejsu, aby uniknąć błędów czasu wykonywania.
CA2258: Udostępnianie interfejsu "DynamicInterfaceCastableImplementation" w Visual Basic nie jest obsługiwane Zapewnienie funkcjonalnego DynamicInterfaceCastableImplementationAttributeinterfejsu przypisywanego wymaga funkcji Domyślne elementy członkowskie interfejsu, która nie jest obsługiwana w języku Visual Basic.
CA2259: Upewnij się ThreadStatic , że jest używana tylko z polami statycznymi ThreadStaticAttribute dotyczy static tylko pól (Shared w Visual Basic). Po zastosowaniu do pól wystąpienia atrybut nie ma wpływu na zachowanie.
CA2260: Poprawnie zaimplementuj ogólne interfejsy matematyczne Ogólne interfejsy matematyczne wymagają użycia samego typu pochodnego dla parametru typu cyklicznego.
CA2261: Nie używaj z ConfigureAwaitOptions.SuppressThrowingTask<TResult> Ta ConfigureAwaitOptions.SuppressThrowing opcja nie jest obsługiwana przez ogólny Task<TResult>element , ponieważ może to prowadzić do zwrócenia nieprawidłowego TResultelementu .
CA2262: Ustaw MaxResponseHeadersLength poprawnie Upewnij się, że wartość jest podana MaxResponseHeadersLength poprawnie. Ta wartość jest mierzona w kilobajtach.
CA2264: Nie przekazuj wartości innej niż null do wartości "ArgumentNullException.ThrowIfNull" Błąd "ArgumentNullException.ThrowIfNull" zgłasza, gdy przekazany argument ma wartość null. Niektóre konstrukcje, takie jak struktury niepuste, a wyrażenia "nameof()" i "new" nigdy nie mają wartości null, więc wyrażenie "ArgumentNullException.ThrowIfNull" nigdy nie zostanie rzucone.
CA2263: Preferuj przeciążenie ogólne, gdy typ jest znany Użycie przeciążenia ogólnego jest preferowane, aby przekazać System.Type argument, gdy typ jest znany, ponieważ promują czystszy i bardziej bezpieczny kod z ulepszonym sprawdzaniem czasu kompilacji.