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á implementuje Dispose, nevolá GC.SuppressFinalize; nebo metoda, která není implementací Dispose, volá 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 tato výjimka je explicitně zadána 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 To ztěžuje odhalení a opravu původní chyby.
CA2207: Inicializujte statická pole hodnotového typu přímo v deklaraci 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 konstantní ani jen pro čtení, nejsou vláknově bezpečná. 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 System.IDisposable, deklaruje pole typu, který také implementuje IDisposable. Metoda Dispose tohoto pole není volána metodou Dispose 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 Dispose základní třídy 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.IDisposable a má pole, která naznačují použití nespravovaných prostředků, neimplementuje finalizátor, jak je popsáno v Object.Finalize.
CA2217: Neoznačujte výčty atributem 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 metodu GetHashCode při přepisování metody Equals Veřejný typ přepisuje System.Object.Equals, ale nepřepisuje System.Object.GetHashCode.
CA2219: Nevyvolávejte výjimky v klauzulích výjimky Když je v klauzuli finally nebo fault vyvolána výjimka, nová výjimka skryje aktivní výjimku. Při vyvolání výjimky v klauzuli filtru modul runtime bezobslužně zachytí výjimku. To ztěžuje odhalení a opravu původní chyby.
CA2224: Přepište metodu 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: Implementujte 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řetěžte operátor rovnosti při přepsání metody 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 porovnává hodnotu s Single.Nan nebo Double.Nan. Použijte Single.IsNan(Single) nebo Double.IsNan(Double) otestujte hodnotu.
CA2243: Řetězcové literály atributů by se měly správně parsovat Ř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ý konstruktoru TaskCompletionSource by měl být typu výčtu TaskCreationOptions namísto typu výčtu TaskContinuationOptions 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 při volání metody HasFlag se liší od typu volajícího výčtu.
CA2249: Zvažte použití string.Contains místo String.IndexOf Volání string.IndexOf, jejichž výsledek se používá ke kontrole přítomnosti či nepřítomnosti podřetězce, lze nahradit výrazem string.Contains.
CA2250: Použijte ThrowIfCancellationRequested ThrowIfCancellationRequested automaticky ověří, zda byl token zrušen, a pokud ano, vyvolá výjimku OperationCanceledException.
CA2251: Používejte String.Equals místo String.Compare Je to přehlednější a pravděpodobně i rychlejší použít String.Equals místo porovnávání výsledku String.Compare s nulou.
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 rozhraní označeném atributem DynamicInterfaceCastableImplementation Typy opatřené atributem DynamicInterfaceCastableImplementationAttribute slouží jako implementace rozhraní pro typ, který implementuje typ IDynamicInterfaceCastable. V důsledku toho musí implementovat všechny členy definované ve zděděných rozhraních, protože typ, který implementuje IDynamicInterfaceCastable, je jinak neposkytne.
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 rozhraní s atributem DynamicInterfaceCastableImplementationAttribute vyžaduje funkci výchozích členů rozhraní, která není v jazyce Visual Basic podporována.
CA2259: Ujistěte se, že ThreadStatic se používá jenom se statickými poli ThreadStaticAttribute static 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> Možnost ConfigureAwaitOptions.SuppressThrowing není podporována obecným Task<TResult>, protože by to mohlo vést k vrácení neplatného TResult.
CA2262: Správně nastavte MaxResponseHeadersLength Ujistěte se, že je hodnota MaxResponseHeadersLength zadána správně. Tato hodnota se měří v kilobajtech.
CA2263: Preferujte obecné přetížení, pokud je typ známý Použití obecného přetížení je vhodnější než předání argumentu System.Type, pokud je typ známý, protože vede k přehlednějšímu a typově bezpečnějšímu kódu s lepšími kontrolami při kompilaci.
CA2264: Nepředávejte nenulnutelnou hodnotu argumentu ArgumentNullException.ThrowIfNull ArgumentNullException.ThrowIfNull vyvolá, když je předaný argument null. Je známo, že některé konstrukty, jako jsou struktury nepovolující hodnotu null a výrazy „nameof()“ a „new“, nikdy nejsou null, takže metoda ArgumentNullException.ThrowIfNull nikdy nevyvolá výjimku.
CA2265: Neporovnávejte Span<T> s null ani s default Porovnání spanu s null nebo default nemusí fungovat tak, jak jste zamýšleli. default a literál null jsou implicitně převedeny na Span<T>.Empty.
CA2266: Vstupní bod programu založený na souborech by měl začínat na #! Pokud se program založený na souborech skládá z více souborů, měl by soubor vstupního bodu začínat čárou shebang (#!), aby se jasně odlišil od ostatních zahrnutých souborů.