Pravidla používání
Pravidla použití podporují správné využití .NET.
V této části
Pravidlo | Popis |
---|---|
CA1801: Revize nepoužitých parametrů | Podpis metody obsahuje parametr, který není použit v těle metody. |
CA1816: Volejte správně GC.SuppressFinalize | Metoda, která je implementací Dispose není volá GC.SuppressFinalize ; nebo metoda, která není implementací Dispose volání GC.SuppressFinalize ; nebo metoda volá GC.SuppressFinalize a předává něco jiného než this (Me v jazyce Visual Basic). |
CA2200: Znovu vyvolejte pro zachování podrobností zásobníku | Výjimka je znovu vyvolána a je jednoznačně uvedena v příkazu throw. Jestliže je výjimka znovu vyvolána zadáním výjimky v příkazu throw, seznam volání metody mezi původní metodou, která vyvolala výjimku, a aktuální metodou je ztracen. |
CA2201: Nevyvolávejte vyhrazené typy výjimek | Původní chyba se tak obtížně rozpozná a ladí. |
CA2207: Inicializujte vloženou hodnotu statických polí | Hodnotový typ deklaruje explicitní statický konstruktor. Chcete-li opravit porušení tohoto pravidla, inicializujte všechna statická data při deklaraci a statický konstruktor odeberte. |
CA2208: Vytvořte správně instance výjimky argumentu | Je provedeno volání výchozího konstruktoru (bez parametrů) typu výjimky, která je typu ArgumentException nebo je z něj odvozena, nebo je předán nesprávný řetězcový argument do konstruktoru s parametry typu výjimky, která je typu ArgumentException nebo je z něj odvozena. |
CA2211: Nekonstantní pole by nemělo být viditelné | Statická pole, která nejsou konstantami nebo jen pro čtení, nejsou bezpečná pro přístup z více vláken. Přístup k takovému poli musí být pečlivě řízen a vyžaduje pokročilé programovací techniky pro synchronizaci přístupu k objektu třídy. |
CA2213: Uvolnitelné pole by mělo být uvolněno | Typ, který implementuje deklaruje System.IDisposable pole, která jsou typy, které také implementují IDisposable . Dispose Metoda pole není volána Dispose metodou deklarujícího typu. |
CA2214: Nevolejte přepisovatelné metody v konstruktorech | Když konstruktor volá virtuální metodu, je možné, že konstruktor pro instanci, která vyvolá metodu, se nespustí. |
CA2215: Metody Dispose by měly volat uvolnění třídy Base | Pokud typ dědí z jednorázového typu, musí volat Dispose metodu základního typu z vlastní Dispose metody. |
CA2216: Uvolnitelné typy by měly deklarovat finalizační metodu | Typ, který implementuje System.IDisposablea má pole, která navrhují použití nespravovaných prostředků, neimplementuje finalizátor, jak je popsáno .Object.Finalize |
CA2217: Neoznačujte výčty pomocí FlagsAttribute | Externě viditelný výčet je označený FlagsAttribute a má jednu nebo více hodnot, které nejsou mocninami dvou nebo kombinace ostatních definovaných hodnot ve výčtu. |
CA2218: Přepište GetHashCode při přepsání Equals | Veřejný typ přepisuje System.Object.Equals , ale nepřepíše System.Object.GetHashCode. |
CA2219: Nevyvolávejte výjimky v klauzulích výjimky | Když je výjimka vyvolána v klauzuli finally nebo fault, je případná aktivní výjimka překryta novou výjimkou. Při vyvolání výjimky v klauzuli filtru modul runtime bezobslužně zachytí výjimku. Původní chyba se tak obtížně rozpozná a ladí. |
CA2224: Přepište Equals při přetížení operátoru rovnosti | Veřejný typ implementuje operátor rovnosti, ale nepřepíše System.Object.Equals. |
CA2225: Přetížení operátoru mají pojmenované alternativy | Bylo zjištěno přetížení operátoru a alternativní metoda s očekávaným názvem nebyla nalezena. Pojmenovaný alternativní člen poskytuje přístup ke stejné funkci jako operátor a je poskytován vývojářům, kteří programují v jazycích, které nepodporují přetížené operátory. |
CA2226: Operátory by měly mít symetrické přetížení | Typ implementuje operátor rovnosti nebo nerovnosti a neimplementuje opačný operátor. |
CA2227: Vlastnosti kolekce by měly být pouze pro čtení | Zapisovatelná vlastnost kolekce umožňuje uživateli nahradit kolekci jinou kolekcí. Vlastnost jen pro čtení neumožňuje kolekci nahradit, ale stále umožňuje nastavit jednotlivé členy. |
CA2229: Implementovat serializační konstruktory | Implementací konstruktoru serializace se vyřeší porušení tohoto pravidla. Pro zapečetěnou třídu musí být konstruktor soukromý. V ostatních případech musí být chráněný. |
CA2231: Přetižte operátor equals při přepsání ValueType.Equals | Typ hodnoty přepíše Object.Equals , ale neimplementuje operátor rovnosti. |
CA2234: Předejte objekty System.Uri namísto řetězců | Je provedeno volání metody, která má řetězcový parametr, jehož název obsahuje „uri“, „URI“, „urn“, „URN“, „url“ nebo „URL“. Deklarující typ metody obsahuje odpovídající přetížení metody, které má System.Uri parametr. |
CA2235: Označte všechna neserializovatelná pole | Neserializovatelný typ pole instance je deklarován v serializovatelném typu. |
CA2237: Označte typy ISerializable pomocí SerializableAttribute | Aby modul CLR (Common Language Runtime) rozpoznal jako serializovatelný, musí být typy označeny atributem SerializableAttribute, i když typ používá vlastní serializační rutinu prostřednictvím implementace ISerializable rozhraní. |
CA2241: Poskytněte správné argumenty metodě formátování | Argument formátu předaný String.Format neobsahuje položku formátu, která odpovídá jednotlivým argumentům objektu nebo naopak. |
CA2242: Testujte správně NaN | Tento výraz testuje hodnotu proti Single.Nan hodnotě nebo Double.Nan . Použijte Single.IsNan(Single) nebo Double.IsNan(Double) otestujte hodnotu. |
CA2243: Literály řetězce atributu by se měly správně analyzovat | Řetězcový literál parametr atributu neprovádí správnou analýzu adresy URL, identifikátoru GUID nebo verze. |
CA2244: Neduplikujte inicializace indexovaných prvků | Inicializátor objektů má více než jeden inicializátor indexovaného prvku se stejným konstantním indexem. Všechny kromě posledního inicializátoru jsou redundantní. |
CA2245: Nepřiřazujte vlastnost sama sobě | Vlastnost byla omylem přiřazena sama sobě. |
CA2246: Nepřiřazujte symbol a jeho člena ve stejném příkazu | Přiřazení symbolu a jeho člena, tj. pole nebo vlastnosti, ve stejném příkazu se nedoporučuje. Není jasné, jestli byl přístup člena zamýšlen k použití staré hodnoty symbolu před přiřazením nebo novou hodnotou z přiřazení v tomto příkazu. |
CA2247: Argument předaný Konstruktor TaskCompletionSource by měl být TaskCreationOptions výčtu místo TaskContinuationOptions výčtu | TaskCompletionSource má konstruktory, které přebírají TaskCreationOptions, které řídí základní úkol, a konstruktory, které přebírají stav objektu, který je uložen v úkolu. Náhodné předání TaskContinuationOptions místo TaskCreationOptions způsobí, že volání považuje možnosti za stav. |
CA2248: Zadejte správný argument enum pro Enum.HasFlag | Typ výčtu předaný jako argument volání HasFlag metody se liší od typu volání výčtu. |
CA2249: Zvažte použití string.Contains místo String.IndexOf | Volání, kde string.IndexOf se výsledek používá ke kontrole přítomnosti nebo nepřítomnosti podřetětědce, lze nahradit string.Contains . |
CA2250: Použití ThrowIfCancellationRequested |
ThrowIfCancellationRequested automaticky zkontroluje, jestli byl token zrušen, a vyvolá OperationCanceledException výjimku, pokud má. |
CA2251: Používejte String.Equals String.Compare |
Místo porovnání výsledku String.Compare s nulou je to jasnější a pravděpodobně rychlejšíString.Equals . |
CA2252: Výslovný souhlas s funkcemi ve verzi Preview | Před použitím rozhraní API verze Preview se přihlaste k funkcím ve verzi Preview. |
CA2253: Pojmenované zástupné symboly by neměly být číselné hodnoty | Pojmenované zástupné symboly v šabloně zprávy protokolování by se neměly skládat pouze z číselných znaků. |
CA2254: Šablona by měla být statický výraz | Šablona zprávy protokolování by se neměla mezi voláními lišit. |
CA2255: Atribut ModuleInitializer by neměl být použit v knihovnách |
Inicializátory modulů jsou určeny k použití kódu aplikace k zajištění inicializace komponent aplikace před zahájením provádění kódu aplikace. |
CA2256: Všichni členové deklarovaní v nadřazených rozhraních musí mít implementaci v dynamicInterfaceCastableImplementation-attributed rozhraní | Typy atributy, které DynamicInterfaceCastableImplementationAttribute fungují jako implementace rozhraní pro typ, který implementuje IDynamicInterfaceCastable typ. V důsledku toho musí poskytnout implementaci všech členů definovaných v zděděných rozhraních, protože typ, který implementuje IDynamicInterfaceCastable , je jinak nezadá. |
CA2257: Členy definované v rozhraní s dynamicInterfaceCastableImplementationAttribute by měly být statické. | Vzhledem k tomu, že typ, který implementuje IDynamicInterfaceCastable , nemusí implementovat dynamické rozhraní v metadatech, volání člena rozhraní instance, který není explicitní implementace definovaná na tomto typu, pravděpodobně selžou za běhu. Označte nové členy static rozhraní, aby nedocházelo k chybám za běhu. |
CA2258: Poskytnutí rozhraní DynamicInterfaceCastableImplementation v jazyce Visual Basic není podporováno | Poskytnutí funkčního DynamicInterfaceCastableImplementationAttribute rozhraní atributu -attributed vyžaduje funkci Výchozí členy rozhraní, která není podporována v jazyce Visual Basic. |
CA2259: Ujistěte se, že ThreadStatic se používá jenom se statickými poli |
ThreadStaticAttributestatic ovlivňuje pouze pole (Shared v jazyce Visual Basic). Při použití u polí instance nemá atribut žádný vliv na chování. |
CA2260: Správně implementujte obecná matematická rozhraní | Obecná matematická rozhraní vyžadují, aby byl odvozený typ použit pro parametr samoopakujícího typu. |
CA2261: Nepoužívejte ConfigureAwaitOptions.SuppressThrowing s Task<TResult> |
Obecná ConfigureAwaitOptions.SuppressThrowing možnost nepodporuje Task<TResult> , protože to může vést k vrácení neplatného TResult kódu . |
CA2262: Správně nastavte MaxResponseHeadersLength |
Ujistěte se, MaxResponseHeadersLength že je hodnota zadaná správně. Tato hodnota se měří v kilobajtech. |
CA2264: Nepředávejte nenulnutelnou hodnotu argumentu ArgumentNullException.ThrowIfNull | ArgumentNullException.ThrowIfNull vyvolá, když je předaný argument null. Některé konstrukty, jako jsou struktury bez hodnoty null, a výrazy nameof() a new nejsou nikdy null, takže ArgumentNullException.ThrowIfNull nikdy nevyvolá výjimku. |
CA2265: Nerovnávejte Span<T> se s null default |
Porovnání rozsahu s rozsahem null nebo default nemusí dělat to, co jste chtěli. default null literál je implicitně převeden na Span<T>.Empty . |
CA2263: Preferujte obecné přetížení, pokud je typ známý | Použití obecného přetížení je vhodnější pro předání argumentu System.Type , pokud je typ známý, protože propagují čistější a bezpečnější kód s vylepšenými kontrolami doby kompilace. |
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.