Перечисление к логическому вопросу приведения - PullRequest
13 голосов
/ 11 июля 2011

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

public enum MyEnum
{
    MyTrue,
    MyFalse
}

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

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

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

bool IsThisTrue = val == MyEnum.MyTrue;

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

Спасибо

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

Ответы [ 3 ]

17 голосов
/ 11 июля 2011

Эта строка будет работать только с неявным оператором статического преобразования (или, может быть, более запутанным оператором true(), но это редко можно увидеть в дикой природе). Вы не можете определить операторы на перечислениях, поэтому в конечном итоге ответ будет:

Вы можете , однако, напишите метод расширения на 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();

13 голосов
/ 11 июля 2011

Напишите метод расширения следующим образом:

public static bool ToBoolean(this MyEnum value) {
    return value == MyEnum.MyTrue;
}

и забудь об этом

4 голосов
/ 11 июля 2011

Попробуйте это:

public enum MyEnum
{
    MyFalse = 0,
    MyTrue = 1
}

тогда:

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

bool IsThisTrue = Convert.ToBoolean((int)val);
...