Установить In enum для C # - PullRequest
       35

Установить In enum для C #

5 голосов
/ 21 декабря 2009

Я хотел бы найти способ проверить, содержится ли набор значений в моей переменной.

[Flags]
public enum Combinations
{
    Type1CategoryA = 0x01,      // 00000001
    Type1CategoryB = 0x02,      // 00000010
    Type1CategoryC = 0x04,      // 00000100
    Type2CategoryA = 0x08,      // 00001000
    Type2CategoryB = 0x10,      // 00010000
    Type2CategoryC = 0x20,      // 00100000
    Type3 = 0x40                // 01000000
}

bool CheckForCategoryB(byte combinations)
{

    // This is where I am making up syntax

    if (combinations in [Combinations.Type1CategoryB, Combinations.Type2CategoryB])
        return true;
    return false;

    // End made up syntax
}

Я пересаживаюсь в .NET из Delphi. Это довольно простой код для написания на Delphi, но я не уверен, как это сделать на C #.

Ответы [ 3 ]

16 голосов
/ 21 декабря 2009

Если вы имеете в виду «хотя бы один из флагов»:

return (combinations
     & (byte)( Combinations.Type1CategoryB | Combinations.Type2CategoryB)) != 0;

также - если вы объявите его как Combinations combinations (вместо byte), вы можете сбросить (byte)

bool CheckForCategoryC(Combinations combinations)
{
    return (combinations & (Combinations.Type1CategoryB | Combinations.Type2CategoryB) ) != 0;
}

Если вы имеете в виду "точно один из", я бы просто использовал switch или if и т. Д.

1 голос
/ 22 декабря 2009

Для более простого способа «проверить» эти значения вы можете проверить Umbrella на CodePlex. Они создали несколько приятных и приятных методов расширения для проверки битовых флагов в перечислениях. Да, это абстракция, но я думаю, что мы должны сосредоточиться на удобочитаемости, а не на самой реализации.

Наслаждайтесь.

0 голосов
/ 21 декабря 2009

Мне так кажется, если я правильно понимаю вопрос

if (combinations == Combinations.Type1CategoryB | Combinations.Type2CategoryB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...