Freigeben über


CA1028: Der Enumerationsspeicher sollte Int32 sein.

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

Kategorie

Microsoft.Design

Unterbrechende Änderung

Breaking

Ursache

Der zugrunde liegende Typ einer öffentlichen Enumeration ist nicht System.Int32.

Regelbeschreibung

Eine Enumeration ist ein Werttyp, der einen Satz verwandter benannter Konstanten definiert. Standardmäßig wird zum Speichern des konstanten Werts der System.Int32-Datentyp verwendet. Sie können diesen zugrunde liegenden Typ zwar ändern, für die meisten Szenarien ist dies jedoch nicht notwendig oder empfehlenswert. Es gibt keinen deutlichen Leistungszuwachs, wenn Sie einen Datentyp verwenden, der kleiner ist als Int32. Wenn Sie den Standarddatentyp nicht verwenden können, sollten Sie einen der CLS (Common Language System)-kompatiblen ganzzahligen Typen wie Byte, Int16, Int32 oder Int64 verwenden, um sicherzustellen, dass alle Werte der Enumeration in CLS-kompatiblen Programmiersprachen dargestellt werden können.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, verwenden Sie Int32, es sei denn, es gibt Größen- oder Kompatibilitätsprobleme. Verwenden Sie Int64 in Fällen, in denen Int32 zum Speichern der Werte nicht ausreicht. Wenn zwecks Abwärtskompatibilität ein kleinerer Datentyp benötigt wird, verwenden Sie Byte oder Int16.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung dieser Regel nur dann, wenn dies aufgrund von Abwärtskompatibilitätsproblemen erforderlich ist. In Anwendungen verursachen Verstöße gegen diese Regel normalerweise keine Probleme. In Bibliotheken, in denen die Sprachinteroperabilität erforderlich ist, wirkt sich ein Verstoß gegen diese Regel aus Sicht des Benutzers u. U. negativ aus.

Beispiel für einen Verstoß

Beschreibungen

Im folgenden Beispiel werden zwei Enumerationen dargestellt, in denen der empfohlene zugrunde liegende Datentyp nicht verwendet wird.

Code

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

Beispiel für die Behandlung

Beschreibungen

Im folgenden Beispiel wird der vorherige Verstoß korrigiert, indem der zugrunde liegende Datentyp in Int32 geändert wird.

Code

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

Verwandte Regeln

CA1008: Enumerationen müssen einen Wert von 0 (null) aufweisen

CA1027: Enumerationen mit FlagsAttribute markieren

CA2217: Enumerationen nicht mit FlagsAttribute markieren

CA1700: Enumerationswerte nicht mit "Reserviert" benennen

CA1712: Keine Typnamen als Präfixe für Enumerationswerte verwenden

Siehe auch

Referenz

System.Byte

System.Int16

System.Int32

System.Int64