Megosztás a következőn keresztül:


CA1508: A nem halott feltételes kód elkerülése

Tulajdonság Érték
Szabályazonosító CA1508
Cím A nem halott feltételes kód elkerülése
Kategória Fenntarthatóság
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

Egy metódus feltételes true kóddal rendelkezik, amely mindig futtatáskor vagy false futtatáskor kiértékelhető. Ez a feltétel ágában false lévő nem használt kódhoz vezet.

Ez a szabály alapértelmezés szerint a teljes kódbázist elemzi, de ez konfigurálható.

Szabály leírása

A metódusok feltételes kóddal is rendelkezhetnek, például ha utasítások, bináris kifejezések (==, !=, , <), >null-ellenőrzések stb. Vegyük például a következő kódot:

public void M(int i, int j)
{
    if (i != 0)
    {
        return;
    }

    if (j != 0)
    {
        return;
    }

    // Below condition will always evaluate to 'false' as 'i' and 'j' are both '0' here.
    if (i != j)
    {
        // Code in this 'if' branch is dead code.
        // It can either be removed or refactored.
        ...
    }
}

A C#- és VB-fordítók a feltételes ellenőrzések elemzését végzik, beleértve a fordítási idő állandó értékeit is, amelyek mindig a következő értékeket true értékelik ki: vagy false. Ez az elemző nem állandó változók adatfolyam-elemzését végzi a nem állandó értékeket tartalmazó redundáns feltételes ellenőrzések meghatározásához. Az előző kódban az elemző ezt határozza meg i , és j mindkettőt 0 az összes olyan kódútvonalhoz, amely eléri i != j az ellenőrzést. Ezért ez az ellenőrzés mindig futásidőben lesz kiértékelve false . Az if utasításban lévő kód nem használható, és eltávolítható vagy újrabontásra is használható. Hasonlóképpen, az elemző nyomon követi a változók nullságát, és redundáns null-ellenőrzéseket jelent.

Feljegyzés

Ez az elemző költséges adatfolyam-elemzést végez a nem állandó értékekről. Ez növelheti az általános fordítási időt bizonyos kódbázisokon.

Mikor kell letiltani a figyelmeztetéseket?

Ha nem aggódik a kód karbantarthatósága miatt, nyugodtan letilthatja a szabály megsértését. Az is jó, ha elnyomja a hamis pozitívnak minősített szabálysértéseket. Ezek olyan egyidejű kód jelenlétében lehetségesek, amelyek több szálból is végrehajthatók.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA1508
// The code that's violating the rule is on this line.
#pragma warning restore CA1508

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA1508.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Karbantarthatóság), amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott szimbólumok kizárása

Bizonyos szimbólumokat, például típusokat és metódusokat kizárhat az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyTypetípusok egyikén sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType

Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |elválasztva):

  • Csak szimbólumnév (a névvel ellátott összes szimbólumot tartalmazza, függetlenül attól, hogy milyen típusú vagy névtérrel rendelkezik).
  • A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek. Minden szimbólumnévhez szimbólum típusú előtag szükséges, például M: metódusokhoz, T: típusokhoz és N: névterekhez.
  • .ctor konstruktorok és .cctor statikus konstruktorok számára.

Példák:

Beállítás értéke Összegzés
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType Megegyezik az összes elnevezett MyTypeszimbólummal.
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 Megegyezik az összes elnevezett MyType1 szimbólummal vagy MyType2.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) Megfelel a megadott metódusnak MyMethod a megadott teljes jogosultsággal rendelkező aláírással.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) Egyezik az adott metódusokkal MyMethod1 és MyMethod2 a megfelelő, teljes mértékben minősített aláírásokkal.

Adott típusok és származtatott típusok kizárása

Bizonyos típusokat és azok származtatott típusait kizárhatja az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType és származtatott típusok egyik metódusán sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType

Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |elválasztva):

  • Csak típusnév (a névvel rendelkező összes típust tartalmazza, függetlenül attól, hogy milyen típust vagy névteret tartalmaz).
  • A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek opcionális T: előtaggal.

Példák:

Beállítás értéke Összegzés
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType Megfelel az összes névvel ellátott MyType típusnak és az összes származtatott típusnak.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 Megfelel az összes névvel ellátott MyType1 típusnak, vagy MyType2 az összes származtatott típusnak.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType Egyezik MyType a megadott teljes névvel és az összes származtatott típusával.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 Egyezik az adott típusokkal MyType1 és MyType2 a megfelelő teljes névvel, valamint az összes származtatott típussal.

Lásd még