CA1028:列舉儲存區應該是 Int32
型別名稱 |
EnumStorageShouldBeInt32 |
CheckId |
CA1028 |
分類 |
Microsoft.Design |
中斷變更 |
中斷 |
原因
公用列舉型別的基礎型別不是 System.Int32。
規則描述
列舉型別是一種實值型別 (Value Type),用以定義一組相關的具名常數。 根據預設,System.Int32 資料型別會用於儲存常數值。 雖然您可以變更這個基礎型別,但是大多數案例中仍不需要或不建議進行變更。 請注意,使用小於 Int32 的資料型別,無法有效改善效能。 如果您無法使用預設資料型別,應該使用其中一個符合 Common Language System (CLS) 標準的整數類資料型別 (Integral Type)、Byte、Int16、Int32 或 Int64,以確定所有的列舉值都可在符合 CLS 標準的程式語言中表示。
如何修正違規
若要修正此規則的違規情形,除非有大小或相容性的問題,否則請使用 Int32。 針對 Int32 未大到可以儲存值的狀況,請使用 Int64。 如果回溯相容性 (Backward Compatibility) 需要較小的資料型別,請使用 Byte 或 Int16。
隱藏警告的時機
只有在回溯相容性問題需要這樣做時,才需隱藏這項規則的警告。 在應用程式中,無法遵守這項規則通常不會產生問題。 在需要語言互通性 (Interoperability) 的程式庫中,無法遵守這項規則可能會對使用者產生不良影響。
違規範例
描述
下列範例會顯示沒有使用建議之基礎資料型別的兩個列舉型別。
程式碼
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
}
}
修正方式範例
描述
下列範例會藉由變更基礎資料型別為 Int32 來修正上述違規。
程式碼
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
}
}
相關規則
CA1027:必須以 FlagsAttribute 標記列舉
CA2217:不要以 FlagsAttribute 標記列舉