CA1028:枚举存储应为 Int32
类型名 |
EnumStorageShouldBeInt32 |
CheckId |
CA1028 |
类别 |
Microsoft.Design |
是否重大更改 |
是 |
原因
公共枚举的基础类型不是 System.Int32。
规则说明
枚举是一种值类型,它定义一组相关的已命名常数。 默认情况下,System.Int32 数据类型用来存储常数值。 尽管您可以更改此基础类型,然而对于大多数情况,既不必要,也不建议您这样做。 请注意,使用小于 Int32 的数据类型不会显著地提高性能。 如果不能使用默认的数据类型,则应使用一种符合公共语言系统 (CLS) 的整型:Byte、Int16、Int32 或 Int64,以确保所有的枚举值都可以用符合 CLS 的编程语言表示。
如何解决冲突
要修复与该规则的冲突,请使用 Int32,除非有大小或兼容性问题。 对于 Int32 不能足以容纳值的情况,请使用 Int64。 如果向后兼容性要求较小的数据类型,请使用 Byte 或 Int16。
何时禁止显示警告
只有在需要保持向后兼容性时,才禁止显示与该规则有关的警告。 在应用程序中,不符合该规则通常不会引发问题。 在要求语言互操作性的库中,不符合该规则可能给用户带来负面影响。
冲突的示例
说明
下面的示例演示两个没有使用推荐的基础数据类型的枚举。
代码
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
}
}
相关规则
CA2217:不要使用 FlagsAttribute 标记枚举