Установка флагов перечисления из целочисленного значения - PullRequest
0 голосов
/ 24 сентября 2019
CompBitsList companyBit;
public CompBitsList CompanyBit { get => companyBit; set => companyBit= value; }

[Flags]
public enum CompBitsList
{
   None = 0
   BitOption1 = 1,
   BitOption2 = 2,
   BitOption3 = 4,
   BitOption4 = 8,
   BitOption5 = 16,
   BitOption6 = 32,
}

Допустим, у меня есть целочисленное значение 22, которое будет содержать флаги перечисления BitOption2, BitOption3 и BitOption5 (2 + 4 + 16).Есть ли способ автоматизировать это так, чтобы я мог передать целочисленное значение и автоматически установить переменную перечисления CompanyBit?

companyBit = CompBitsList.BitOption2 | CompBitsList.BitOption3 | CompBitsList.BitOption5

Я не очень знаком с перечислениями, но я бы предпочел не делать этот методвыше, поэтому любые предложения приветствуются.Спасибо:)

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете просто привести int к экземпляру CompBitsList.

CompBitsList companyBit = (CompBitsList)22;
companyBit.HasFlag(CompBitsList.BitOption2); // True
companyBit.HasFlag(CompBitsList.BitOption3); // True
companyBit.HasFlag(CompBitsList.BitOption5); // True
companyBit.HasFlag(CompBitsList.BitOption6); // False

Вы также можете определить значение для этого перечисления, которое представляет комбинацию флагов, если это имеет смысл, и выЯ буду много комбинировать эти флаги.

[Flags]
public enum CompBitsList
{
   None = 0
   BitOption1 = 1,
   BitOption2 = 2,
   BitOption3 = 4,
   BitOption4 = 8,
   BitOption5 = 16,
   BitOption6 = 32,
   BitOptions2And3And5 = BitOption2 | BitOption3 | BitOption5 //or just 22
}
...