Передать методу подмножество enum в C#?

Я хочу определить метод, который возвращает истину или ложь, если подмножество перечисления (первый аргумент) содержит элемент перечисления (второй элемент)

Другими словами, имея перечисление как:

public enum type { INST, INST_NAME, OPEN_BR, CLOSED_BR};

Я хочу определить метод, как этот:

public bool check (IEnumerable <type> subset , type t)
       {if(subset.Contains t)
            return true;
        else
            return false;
       }

А затем позвоните с помощью:

check(new List<type>{INST, INST_NAME},type.INST);

Что возвращает истину, так как список содержит INST. Итак, вопрос: знаете ли вы какой-нибудь более элегантный способ реализации этого метода (при условии, что он работает).

Спасибо за ответ!

2 ответа

Решение

Вам не нужен отдельный метод, чтобы упростить это - вы можете просто использовать встроенный Contains метод расширения:

var subset = new List<type>{INST, INST_NAME};

bool check = subset.Contains(type.INST);

Добавьте атрибут [Flags] в ваше перечисление. Установите каждый параметр, который будет представлен эксклюзивным битом.

Например:

[Flags]
enum LogLevel
{
    App = 1 << 0,
    Exception = 1 << 1,
    Warning = 1 << 2,
    Measurement = 1 << 3,
    User = 1 << 4
}

Затем реализуйте свой метод так:

bool IsSet(LogLevel levels, LogLevel levelInQuestion)
{
    return (levels & levelInQuestion) > 0;
}

Пример использования:

LogLevel logLevels = LogLevel.App | LogLevel.Warning | LogLevel.Exception;
bool logWarnings = IsSet(logLevels, LogLevel.Warning);
Другие вопросы по тегам