Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Byte

Int16

Int32

Int64