更新:2007 年 11 月
| TypeName | 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
    }
}