Подтвердить что ты не робот

Перечисление на логический вопрос литья

У меня есть следующее перечисление:

public enum MyEnum
{
    MyTrue,
    MyFalse
}

И я хотел бы, в конечном счете, иметь возможность автоматически конвертировать мое перечисление в логическое значение с простой строкой:

MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;

В настоящее время я должен это сделать:

bool IsThisTrue = val == MyEnum.MyTrue;

Есть ли какой-то механизм, который я могу применить к моему перечислению, чтобы разрешить собственное перечисление enum- > bool? Мне интересно, нужен ли какой-то вариант typeconverter или нет.

Спасибо

Изменить: Есть причина для моего пользовательского перечисления. Поскольку эти свойства в конечном итоге связаны с сеткой свойств, у нас есть механизмы, позволяющие привязать все пользовательские перечисления к многоязычным строкам в файлах ресурсов. Нам нужно, чтобы все перечисления, которые мы используем, находились в определенном пространстве имен, поэтому класс "MyEnum".

4b9b3361

Ответ 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);