Перечисление на логический вопрос литья
У меня есть следующее перечисление:
public enum MyEnum
{
MyTrue,
MyFalse
}
И я хотел бы, в конечном счете, иметь возможность автоматически конвертировать мое перечисление в логическое значение с простой строкой:
MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
В настоящее время я должен это сделать:
bool IsThisTrue = val == MyEnum.MyTrue;
Есть ли какой-то механизм, который я могу применить к моему перечислению, чтобы разрешить собственное перечисление enum- > bool? Мне интересно, нужен ли какой-то вариант typeconverter или нет.
Спасибо
Изменить: Есть причина для моего пользовательского перечисления. Поскольку эти свойства в конечном итоге связаны с сеткой свойств, у нас есть механизмы, позволяющие привязать все пользовательские перечисления к многоязычным строкам в файлах ресурсов. Нам нужно, чтобы все перечисления, которые мы используем, находились в определенном пространстве имен, поэтому класс "MyEnum".
Ответы
Ответ 1
Эта строка будет работать только с неявным оператором статического преобразования (или, возможно, более запутанным оператором true()
, но это редко встречается в дикой природе). Вы не можете определить операторов на перечислениях, так что в конечном итоге ответ будет следующим: no.
Однако вы могли бы написать метод расширения на MyEnum
для возврата true
или false
.
static class MyEnumUtils {
public static bool Value(this MyEnum value) {
switch(value) {
case MyEnum.MyTrue: return true;
case MyEnum.MyFalse: return false;
default: throw new ArgumentOutOfRangeException("value");
// ^^^ yes, that is possible
}
}
}
то вы можете использовать bool IsThisTrue = val.Value();
Ответ 2
Напишите способ расширения следующим образом:
public static bool ToBoolean(this MyEnum value) {
return value == MyEnum.MyTrue;
}
и забыть об этом
Ответ 3
Попробуйте следующее:
public enum MyEnum
{
MyFalse = 0,
MyTrue = 1
}
то
MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
bool IsThisTrue = Convert.ToBoolean((int)val);