Udostępnij za pośrednictwem


CA1028: Pamięć wyliczenia powinna być Int32

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

Kategoria

Microsoft.Design

Zmiana kluczowa

Kluczowa

Przyczyna

Typ podstawowy publicznego wyliczenia nie jest Int32.

Opis reguły

Wyliczenie to typ wartości, który definiuje zestaw powiązanych, nazwanych stałych.Domyślnie typ danych Int32 jest używany do przechowywania wartości stałej.Mimo że można zmienić typ podstawowy, nie jest to konieczne ani zalecane dla większości scenariuszy.Należy zauważyć, że użycie typu danych mniejszego niż Int32 nie pozwala na uzyskanie znaczącego zysku wydajnościowego.Jeśli nie można użyć domyślnego typu danych, należy użyć jednego z integralnych typów zgodnych z systemem języka wspólnego (CLS), Byte, Int16, Int32, lub Int64 , aby upewnić się, że wszystkie wartości wyliczenia mogą być reprezentowane w językach programowania zgodnych z CLS.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, jeśli nie istnieją problemy związane z wielkością lub zgodnością, należy użyć Int32.W sytuacjach, gdy Int32 nie jest wystarczająco duży, aby przechowywać wartości, należy użyć Int64.Jeśli zgodność wymaga mniejszych typów danych, należy użyć Byte lub Int16.

Kiedy pominąć ostrzeżenia

Należy pominąć ostrzeżenie od tej reguły, tylko jeśli wymagają tego kwestie zgodności z poprzednimi wersjami.W aplikacjach nieprzestrzeganie tej reguły zwykle nie powoduje problemów.W bibliotekach, gdzie wymagane jest współdziałanie języków, nieprzestrzeganie tej reguły może niekorzystnie wpłynąć na użytkowników.

Przykład naruszenia

Opis

W poniższym przykładzie przedstawiono dwa wyliczenia, które nie używają zalecanego typu danych.

Kod

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
   }
}

Przykład sposobu wprowadzenia poprawki

Opis

Poniższy przykład rozwiązuje poprzednie naruszenie, zmieniając typ danych na Int32.

Kod

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
    }
}

Powiązane reguły

CA1008: Wyliczenia powinny mieć wartość zero

CA1027: Oznaczaj wyliczenia za pomocą FlagsAttribute

CA2217: Nie oznaczaj wyliczeń za pomocą FlagsAttribute

CA1700: Nie należy nadawać wartościom enum oznaczenia „Reserved"

CA1712: Nie należy poprzedzać wartości enum nazwą typu

Zobacz też

Informacje

Byte

Int16

Int32

Int64