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ý FlagsAttributea 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.EqualsString.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 DynamicInterfaceCastableImplementationAttributerozhraní 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 (Sharedv 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 TResultkó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.
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.