CA2217: Nie oznaczaj wyliczeń za pomocą FlagsAttribute
TypeName |
DoNotMarkEnumsWithFlags |
CheckId |
CA2217 |
Kategoria |
Microsoft.Usage |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Zewnętrznie widoczne wyliczenie jest oznaczone atrybutem FlagsAttribute i posiada jeden lub więcej wartości, które nie są potęgami dwójki lub kombinacji innych zdefiniowanych wartości z wyliczenia.
Opis reguły
Wyliczenie powinno mieć atrybut FlagsAttribute tylko w przypadku, gdy każda wartość zdefiniowana w wyliczeniu jest potęgą 2 lub kombinacją zdefiniowanych wartości.
Jak naprawić naruszenia
Aby rozwiązać naruszenie tej zasady, usuń FlagsAttribute z wyliczenia.
Kiedy pominąć ostrzeżenia
Nie należy pomijać ostrzeżenia dotyczącego tej reguły.
Przykład
Poniższy przykład pokazuje wyliczenie Color, zawierającego wartość 3, która nie jest potęgą 2, ani kombinacją żadnych zdefiniowanych wartości.Wyliczenie Color nie powinno być oznaczone atrybutem FlagsAttribute.
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
};
}
Poniższy przykład pokazuje wyliczenie, Days, które spełnia wymagania dla oznaczenia atrybutem 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
};
}
Powiązane reguły
CA1027: Oznaczaj wyliczenia za pomocą FlagsAttribute