Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Reguły użycia obsługują prawidłowe użycie platformy .NET.
W tej sekcji
| Reguła | Opis |
|---|---|
| CA1801: Przejrzyj nieużywane parametry | Podpis metody zawiera parametr, który nie jest używany w jej treści. |
| CA1816: Poprawnie wywołaj metodę GC.SuppressFinalize | Metoda będąca implementacją Dispose nie wywołuje GC.SuppressFinalize; lub metoda, która nie jest implementacją Dispose, wywołuje GC.SuppressFinalize; lub metoda wywołuje GC.SuppressFinalize i przekazuje coś innego niż this (Me w Visual Basic). |
| CA2200: Ponownie zgłoś wyjątek, aby zachować szczegóły stosu wywołań | Wyjątek jest zgłaszany ponownie i jest on jawnie określony w instrukcji „throw”. Jeśli wyjątek zostanie ponownie zgłoszony poprzez wskazanie wyjątku w instrukcji „throw”, stos wywołań między metodą, która pierwotnie zgłosiła wyjątek, a bieżącą metodą zostanie utracony. |
| CA2201: Nie wywołuj zastrzeżonych typów wyjątku | Sprawia to, że oryginalny błąd jest trudny do wykrycia i debugowania. |
| CA2207: Inicjalizuj pola statyczne typów wartościowych bezpośrednio w deklaracji | Typ wartości deklaruje jawny, statyczny konstruktor. Aby usunąć naruszenie tej reguły, zainicjuj wszystkie dane statyczne w momencie ich deklarowania i usuń konstruktor statyczny. |
| CA2208: Poprawnie twórz wyjątki argumentów | Wywoływany jest domyślny konstruktor (bez parametrów) typu wyjątku, który jest typu ArgumentException lub po nim dziedziczy, albo do konstruktora z parametrami typu wyjątku, który jest typu ArgumentException lub po nim dziedziczy, przekazywany jest nieprawidłowy argument typu string. |
| 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 typów, które również implementują IDisposable. Metoda Dispose pola nie jest wywoływana przez metodę Dispose typu deklarującego. |
| CA2214: Nie wywołuj metod, które można przesłonić, w konstruktorach | Gdy konstruktor wywołuje metodę wirtualną, może się zdarzyć, że konstruktor obiektu, dla którego ta metoda jest wywoływana, nie został jeszcze 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 usuwalne powinny deklarować finalizator | Typ, który implementuje System.IDisposable i ma pola sugerujące użycie niezarządzanych zasobów, nie implementuje finalizatora zgodnie z opisem w Object.Finalize. |
| CA2217: Nie oznaczaj wyliczeń za pomocą atrybutu FlagsAttribute | Wyliczenie widoczne na zewnątrz jest oznaczone symbolem FlagsAttribute i ma co najmniej jedną wartość, która nie jest potęgą liczby dwa ani kombinacją innych zdefiniowanych wartości w wyliczeniu. |
| CA2218: Przesłoń metodę GetHashCode przy przesłanianiu metody Equals | Typ publiczny przesłania element System.Object.Equals, ale nie przesłania elementu System.Object.GetHashCode. |
| 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łoń metodę Equals podczas przeciążania operatora równości | Typ publiczny implementuje operator równości, ale nie zastępuje System.Object.Equalselementu . |
| CA2225: Przeciążenia operatorów mają nazwane odpowiedniki | Wykryto przeciążenie operatora i nie znaleziono oczekiwanej metody alternatywnej o podanej 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ąpienie kolekcji, ale nadal umożliwia ustawianie poszczególnych elementó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ąż operator == podczas przesłaniania metody ValueType.Equals | Typ wartości przesłania element Object.Equals, 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”. Typ deklarujący metodę ma odpowiednie przeciążenie tej metody z parametrem System.Uri. |
| CA2235: Oznacz wszystkie pola nieprzeznaczone do serializacji | Pole instancyjne typu, który nie jest serializowalny, jest zadeklarowane w typie, który jest serializowalny. |
| CA2237: Oznacz typy ISerializable za pomocą atrybutu SerializableAttribute | Aby typy zostały rozpoznane przez środowisko uruchomieniowe wspólnego języka jako serializowalne, muszą być oznaczone atrybutem SerializableAttribute, nawet jeśli typ używa niestandardowej procedury serializacji przez zaimplementowanie 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: Prawidłowo sprawdzać wartość NaN | To wyrażenie porównuje wartość z Single.Nan 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 zawiera więcej niż jeden inicjator elementu indeksowanego z tym samym stałym indeksem. Wszystkie oprócz ostatniego inicjalizatora są zbędne. |
| 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 składowej w tej samej instrukcji | Przypisywanie symbolu i jego składowej, czyli pola lub właściwości, w ramach tej samej instrukcji nie jest zalecane. Nie jest jasne, czy odwołanie do składowej miało korzystać ze starej wartości symbolu sprzed przypisania, czy z nowej wartości wynikającej z przypisania w tej instrukcji. |
| CA2247: Argument przekazany do konstruktora TaskCompletionSource powinien być typem wyliczeniowym TaskCreationOptions zamiast typu wyliczeniowego TaskContinuationOptions | TaskCompletionSource ma konstruktory przyjmujące parametr TaskCreationOptions, który steruje bazowym zadaniem, oraz konstruktory przyjmujące obiekt stanu przechowywany w zadaniu. Przypadkowe przekazanie elementu TaskContinuationOptions zamiast taskCreationOptions spowoduje wywołanie traktujące opcje jako stan. |
| CA2248: Przekaż poprawny argument typu „enum” do elementu „Enum.HasFlag” | Typ wyliczeniowy przekazany jako argument w wywołaniu metody HasFlag różni się od typu wyliczeniowego, z którego wywoływana jest metoda. |
| CA2249: Rozważ użycie String.Contains zamiast String.IndexOf | Wywołania elementu string.IndexOf, których wynik jest używany do sprawdzania obecności lub braku podciągu, mogą zostać zastąpione elementem 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 String.Equals zamiast String.Compare |
Bardziej czytelne i prawdopodobnie szybsze jest użycie String.Equals zamiast porównywania wyniku działania String.Compare z zerem. |
| CA2252: Wyrażanie zgody na funkcje w wersji zapoznawczej | Włącz funkcje w wersji zapoznawczej przed użyciem interfejsów API w wersji zapoznawczej. |
| CA2253: Nazwane symbole zastępcze nie powinny być wartościami numerycznymi | Nazwane symbole zastępcze w szablonie komunikatu logowania nie powinny składać się wyłącznie z cyfr. |
| 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 składowe zadeklarowane w interfejsach bazowych muszą mieć implementację w interfejsie oznaczonym atrybutem DynamicInterfaceCastableImplementation | Typy oznaczone atrybutem DynamicInterfaceCastableImplementationAttribute pełnią rolę implementacji interfejsu dla typu implementującego typ IDynamicInterfaceCastable. W związku z tym musi udostępniać implementację wszystkich składowych zdefiniowanych w dziedziczonych interfejsach, ponieważ w przeciwnym razie typ implementujący IDynamicInterfaceCastable ich nie udostępni. |
| CA2257: Składowe zdefiniowane w interfejsie z atrybutem „DynamicInterfaceCastableImplementationAttribute” powinny być statyczne | Ponieważ typ implementujący IDynamicInterfaceCastable może nie posiadać w metadanych dynamicznego interfejsu, wywołania członka interfejsu dynamicznego, który nie jest jawnie zaimplementowany na tym typie, mogą zakończyć się niepowodzeniem podczas działania programu. Oznacz nowe elementy członkowskie static interfejsu, aby uniknąć błędów środowiska uruchomieniowego. |
| CA2258: Udostępnianie interfejsu "DynamicInterfaceCastableImplementation" w Visual Basic nie jest obsługiwane | Zapewnienie funkcjonalnego interfejsu z atrybutem DynamicInterfaceCastableImplementationAttribute wymaga funkcji Domyślni składowi interfejsu, która nie jest obsługiwana w języku Visual Basic. |
CA2259: Upewnij się, że ThreadStatic jest używany tylko ze statycznymi polami |
ThreadStaticAttribute wpływa tylko na pola static (Shared w Visual Basic). Po zastosowaniu do pól instancji atrybut nie ma wpływu na zachowanie. |
| CA2260: Poprawnie zaimplementuj ogólne interfejsy matematyczne | Generyczne interfejsy matematyczne wymagają, aby sam typ pochodny był używany jako samoodwołujący się parametr typu. |
CA2261: Nie używaj ConfigureAwaitOptions.SuppressThrowing z Task<TResult> |
Opcja ConfigureAwaitOptions.SuppressThrowing nie jest obsługiwana przez ogólny Task<TResult>, ponieważ mogłoby to spowodować zwrócenie nieprawidłowego TResult. |
CA2262: Ustaw MaxResponseHeadersLength poprawnie |
Upewnij się, że wartość MaxResponseHeadersLength jest podana poprawnie. Ta wartość jest mierzona w kilobajtach. |
| CA2263: Preferuj przeciążenie ogólne, gdy typ jest znany | Użycie przeciążenia generycznego jest lepsze niż przekazywanie argumentu System.Type, gdy typ jest znany, ponieważ sprzyja to tworzeniu czystszego kodu o większym bezpieczeństwie typów oraz zapewnia lepszą weryfikację na etapie kompilacji. |
| CA2264: Nie przekazuj wartości innej niż null do wartości "ArgumentNullException.ThrowIfNull" | Metoda „ArgumentNullException.ThrowIfNull” zgłasza wyjątek, gdy przekazany argument ma wartość „null”. Niektóre konstrukcje, takie jak struktury niedopuszczające wartości null oraz wyrażenia „nameof()” i „new”, nigdy nie mają wartości null, więc metoda „ArgumentNullException.ThrowIfNull” nigdy nie zgłosi wyjątku. |
CA2265: Nie należy porównywać Span<T> z null lub default |
Porównanie zakresu z null lub default może nie dać oczekiwanego rezultatu.
default i literał null są niejawnie konwertowane na Span<T>.Empty. |
CA2266: Punkt wejścia programu oparty na plikach powinien zaczynać się od #! |
Gdy program oparty na plikach składa się z wielu plików, plik punktu wejścia powinien zaczynać się od wiersza shebang (#!), aby wyraźnie odróżnić go od innych dołączonych plików. |
Współpracuj z nami w serwisie GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.