CA1028: Az enumerálási tárolónak Int32-nek kell lennie
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1028 |
Cím | Az enumerálási tárolónak Int32-nek kell lennie |
Kategória | Design |
A javítás kompatibilitástörő vagy nem törik | Törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
Az enumerálás mögöttes típusa nem System.Int32.
Alapértelmezés szerint ez a szabály csak külsőleg látható enumerálásokat tekint meg, de ez konfigurálható.
Szabály leírása
Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. Alapértelmezés szerint az System.Int32 adattípus az állandó érték tárolására szolgál. Annak ellenére, hogy módosíthatja ezt az alapul szolgáló típust, a legtöbb forgatókönyv esetében nem szükséges vagy ajánlott. Nem érhető el jelentős teljesítménynövekedés olyan adattípussal, amely kisebb, mint Int32. Ha nem tudja használni az alapértelmezett adattípust, a Common Language System (CLS)-kompatibilis integráltípusok egyikét kell használnia, ByteInt16Int32vagy Int64 győződjön meg arról, hogy az enumerálás összes értéke megjeleníthető a CLS-kompatibilis programozási nyelvekben.
Szabálysértések kijavítása
A szabály megsértésének kijavításához, ha nincs méret- vagy kompatibilitási probléma, használja a következőt Int32: . Olyan helyzetekben, ahol Int32 nem elég nagy az értékek tárolásához, használja a .Int64 Ha a visszamenőleges kompatibilitás kisebb adattípust igényel, használja Byte vagy Int16.
Mikor kell letiltani a figyelmeztetéseket?
Csak akkor tiltsa le a figyelmeztetést ebből a szabályból, ha a visszamenőleges kompatibilitási problémák megkövetelik. Az alkalmazásokban a szabály betartásának elmulasztása általában nem okoz problémát. A kódtárakban, ahol a nyelvi együttműködésre van szükség, a szabály betartásának elmulasztása hátrányosan érintheti a felhasználókat.
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 CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028
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.CA1028.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ással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezt a beállítást konfigurálhatja csak ehhez a szabályhoz, az összes szabályhoz, vagy az ebben a kategóriában (Tervezés) szereplő összes szabályhoz, amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott API-felületek belefoglalása
A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Példa
Az alábbi példa két olyan enumerációt mutat be, amelyek nem a javasolt alapul szolgáló adattípust használják.
[Flags]
public enum Days : uint
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : sbyte
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As UInteger
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As SByte
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
Az alábbi példa az alapul szolgáló adattípus Int32módosításával kijavítja az előző szabálysértést.
[Flags]
public enum Days : int
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : int
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As Integer
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As Integer
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
Kapcsolódó szabályok
- CA1008: Az enumerálásnak nulla értékkel kell rendelkeznie
- CA1027: Számjelek megjelölése FlagsAttribute használatával
- CA2217: Ne jelölje meg a számokat a FlagsAttribute használatával
- CA1700: Ne nevezze el a "Fenntartott" enumerálási értékeket
- CA1712: A típusnévvel rendelkező enumerálási értékek előtagja nem
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: