Udostępnij za pośrednictwem


CA1028: Enum składowania powinna być Int32

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

Kategoria

Microsoft.Design

Zmiana kluczowa

Kluczowa

Przyczyna

Typ podstawowy publicznego wyliczenia nie jest System.Int32.

Opis reguły

Wyliczenie to typ wartości, który definiuje zestaw powiązanych, nazwanych stałych.Domyślnie typ danych System.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

ms182147.collapse_all(pl-pl,VS.110).gifOpis

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

ms182147.collapse_all(pl-pl,VS.110).gifKod

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

ms182147.collapse_all(pl-pl,VS.110).gifOpis

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

ms182147.collapse_all(pl-pl,VS.110).gifKod

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: Znak wyliczenia z FlagsAttribute

CA2217: Nie należy oznaczać wyliczenia z FlagsAttribute

CA1700: Nie nazwy wartości wyliczenia 'Zastrzeżony'

CA1712: Nie prefiks wartości wyliczenia o nazwie typu

Zobacz też

Informacje

System.Byte

System.Int16

System.Int32

System.Int64