我有以下枚举:
[Flags]
public enum ElementsTag
{
None,
Surname,
SecondSurname,
Forenames,
PersonalNumber,
Birthday,
Nationality,
DocumentExpirationDate,
DocumentNumber,
Sex,
CityOfBirth,
ProvinceOfBirth,
ParentsName,
PlaceOfResidence,
CityOfResidence,
ProvinceOfResidence
}
因此,当我试图将枚举值作为参数传递给方法时,如下所示:
this.GetDataElementFromByteArray((byte[])aData, ElementsTag.ParentsName);
我可以在调试中看到ElementsTag.ParentsName包含值:
PersonalNumber | DocumentNumber
而不是只包含ParentsName。枚举的其他成员也会发生这种情况,例如,传递给ElementsTag方法。Nationality包含:
Nationality = SecondSurname | PersonalNumber
为什么?
我希望每个枚举成员只包含自己的值,不包含其他值,例如:
ElementsTag.ParentsName = ParentsName
ElementsTag.Nationality = Nationality
如何做到这一点?
您的枚举定义等于这个
[Flags]
public enum ElementsTag
{
None = 0,
Surname = 1,
SecondSurname = 2,
Forenames = 3,
PersonalNumber = 4,
Birthday = 5,
Nationality = 6,
DocumentExpirationDate = 7,
DocumentNumber = 8,
Sex = 9,
CityOfBirth = 10,
ProvinceOfBirth = 11,
ParentsName = 12,
PlaceOfResidence = 13,
CityOfResidence = 14,
ProvinceOfResidence = 15
}
如果通过ElementsTag.ParentsName
,则使用值12。在二进制记数法中,12=0000 1100。因此,第3位和第4位被设置。第3位对应于值4,其为ElementsTag.PersonalNumber
,第4位为值8,其对应于ElementsTag.DocumentNumber
。
如果你想要与众不同的值,你必须使用2^n个值,比如:
[Flags]
public enum ElementsTag
{
None = 0,
Surname = 1,
SecondSurname = 1 << 1, // 2
Forenames = 1 << 2, // 4
PersonalNumber = 1 << 3, // 8
Birthday = 1 << 4,
Nationality = 1 << 5,
DocumentExpirationDate = 1 << 6,
DocumentNumber = 1 << 7,
Sex = 1 << 8,
CityOfBirth = 1 << 9,
ProvinceOfBirth = 1 << 10,
ParentsName = 1 << 11,
PlaceOfResidence = 1 << 12,
CityOfResidence = 1 << 13,
ProvinceOfResidence = 1 << 14
}