Share via


CA2217:不要使用 FlagsAttribute 标记枚举

类型名

DoNotMarkEnumsWithFlags

CheckId

CA2217

类别

Microsoft.Usage

是否重大更改

原因

在外部可见的枚举使用 FlagsAttribute 标记,并且它包含的一个或多个值不是 2 的幂或该枚举中其他定义的值的组合。

规则说明

只有当枚举中定义的每一个值是 2 的幂或所定义值的组合时,该枚举才可以显示 FlagsAttribute 属性。

如何解决冲突

要修复与该规则的冲突,请从枚举中移除 FlagsAttribute

何时禁止显示警告

不要禁止显示此规则发出的警告。

示例

下面的示例显示了枚举 Color,该枚举包含值 3,该值既不是 2 的幂,也不是任何定义的值的组合。 不应使用 FlagsAttribute 标记 Color 枚举。

Imports System

Namespace Samples

    ' Violates this rule    
    <FlagsAttribute()> _
    Public Enum Color

        None = 0
        Red = 1
        Orange = 3
        Yellow = 4

    End Enum
End Namespace
using System;

namespace Samples
{    
    // Violates this rule    
    [FlagsAttribute]        
    public enum Color
    { 
        None    = 0, 
        Red     = 1, 
        Orange  = 3, 
        Yellow  = 4 
    }
}

using namespace System;

namespace Samples 
{
    // Violates this rule    
    [FlagsAttribute]    
    public enum class Color    
    {        
        None   = 0,        
        Red    = 1,        
        Orange = 3,        
        Yellow = 4    
    };
}

下面的示例显示了枚举 Days,该枚举符合用 System.FlagsAttribute 标记的要求。

Imports System
Namespace Samples

    <FlagsAttribute()> _
    Public Enum Days

        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday

    End Enum
End Namespace

using System;

namespace Samples
{    
    [FlagsAttribute]    
    public enum Days    
    {        
        None        = 0,        
        Monday      = 1,        
        Tuesday     = 2,        
        Wednesday   = 4,        
        Thursday    = 8,        
        Friday      = 16,        
        All         = Monday| Tuesday | Wednesday | Thursday | Friday    
    }
}

using namespace System;

namespace Samples 
{    
    [FlagsAttribute]    
    public enum class Days    
    {        
        None        = 0,        
        Monday      = 1,        
        Tuesday     = 2,        
        Wednesday   = 4,        
        Thursday    = 8,        
        Friday      = 16,        
        All         = Monday| Tuesday | Wednesday | Thursday | Friday    
    };
}

相关规则

CA1027:用 FlagsAttribute 标记枚举

请参见

参考

System.FlagsAttribute