CA1028: Úložiště výčtu by měl být Int32
TypeName |
EnumStorageShouldBeInt32 |
CheckId |
CA1028 |
Kategorie |
Microsoft.Design |
Narušující změna |
Narušující |
Příčina
Podkladový typ veřejného výčtu není Int32.
Popis pravidla
Výčet je typ hodnoty, který definuje množinu souvisejících pojmenovaných konstant.Standardně se pro uložení konstantní hodnoty používá datový typ Int32.Přestože je možné změnit tento podkladový typ, není to nezbytné ani doporučené pro většinu scénářů.Všimněte si, že použitím menšího datového typu než Int32 není dosaženo žádného významného zisku.Pokud není možné použít výchozí datový typ, měl by být použit jeden z celočíselných typů odpovídajících specifikaci Common Language System (CLS), jako jsou Byte, Int16, Int32, nebo Int64, aby bylo zajištěno, že všechny hodnoty výčtu mohou být reprezentovány ve všech programovacích jazycích odpovídajících specifikaci CLS.
Jak vyřešit porušení
Porušení tohoto pravidla je možné odstranit použitím datového typu Int32, pokud to nevyvolá problémy s velikostí nebo kompatibilitou.V situacích, ve kterých není datový typ Int32 dostatečně velký pro popis všech možných hodnot, je možné použít datový typ Int64.Pokud zpětná kompatibilita vyžaduje menší datový typ, je možné použít datový typ Byte nebo Int16.
Kdy potlačit upozornění
Upozornění na toto pravidlo je vhodné potlačit pouze tehdy, pokud to vyžaduje zpětná kompatibilita.Nedodržení tohoto pravidla v aplikacích obvykle nezpůsobí problémy.V knihovnách, ve kterých je vyžadována jazyková interoperabilita, může nedodržení tohoto pravidla nepříznivě ovlivnit uživatele.
Příklad porušení
Description
Následující příklad ukazuje dva výčty, které nepoužívají doporučený podkladový datový typ.
Kód
Imports System
Namespace Samples
<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
End Namespace
using System;
namespace DesignLibrary
{
[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
}
}
Příklad opravy
Description
Následující příklad řeší předchozí porušení pravidla změnou podkladového datového typu na Int32.
Kód
Imports System
Namespace Samples
<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
End Namespace
using System;
namespace Samples
{
[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
}
}
Související pravidla
CA1008: Výčty by měly mít nulovou hodnotu
CA1027: Označte výčty pomocí FlagsAttribute
CA2217: Neoznačujte výčty pomocí FlagsAttribute
CA1700: Nepojmenovávejte výčty hodnot 'Reserved'
CA1712: Nezačínejte hodnoty výčtu s názvem typu