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