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