Передать методу подмножество 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);