Share via


CA1028:枚举存储应为 Int32

类型名

EnumStorageShouldBeInt32

CheckId

CA1028

类别

Microsoft.Design

是否重大更改

原因

公共枚举的基础类型不是 System.Int32

规则说明

枚举是一种值类型,它定义一组相关的已命名常数。 默认情况下,System.Int32 数据类型用来存储常数值。 尽管您可以更改此基础类型,然而对于大多数情况,既不必要,也不建议您这样做。 请注意,使用小于 Int32 的数据类型不会显著地提高性能。 如果不能使用默认的数据类型,则应使用一种符合公共语言系统 (CLS) 的整型:ByteInt16Int32Int64,以确保所有的枚举值都可以用符合 CLS 的编程语言表示。

如何解决冲突

要修复与该规则的冲突,请使用 Int32,除非有大小或兼容性问题。 对于 Int32 不能足以容纳值的情况,请使用 Int64。 如果向后兼容性要求较小的数据类型,请使用 ByteInt16

何时禁止显示警告

只有在需要保持向后兼容性时,才禁止显示与该规则有关的警告。 在应用程序中,不符合该规则通常不会引发问题。 在要求语言互操作性的库中,不符合该规则可能给用户带来负面影响。

冲突的示例

说明

下面的示例演示两个没有使用推荐的基础数据类型的枚举。

代码

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

相关规则

CA1008:枚举应具有零值

CA1027:用 FlagsAttribute 标记枚举

CA2217:不要使用 FlagsAttribute 标记枚举

CA1700:不要命名“Reserved”枚举值

CA1712:不要将类型名用作枚举值的前缀

请参见

参考

System.Byte

System.Int16

System.Int32

System.Int64