Возможно ли в .NET 3.5 указать тип перечисления? - PullRequest
1 голос
/ 12 мая 2010

У меня есть перечислитель, который отображается на группу int

пример

enum MyEnum {
Open = 1,
Closed = 2,
Exit = 4

}

Однако я нахожу, что когда я хочу присвоить это целое число, я должен сначала разыграть его.

int myEnumNumber = **(int)** MyEnum.Open;

Можно ли указать тип перечисления, чтобы неявно было задано целое число для любого значения в перечислении? Таким образом, мне не нужно продолжать приводить его к int, если я хочу его использовать

спасибо

Ответы [ 4 ]

3 голосов
/ 12 мая 2010

Нет, это специально - перечисления имеют базовый тип данных, но они не считаются идентичными, потому что это, возможно, создает множество возможностей ошибок, которые таким способом легко уловить.

Например, вы так много говорите о том, что все время должны произносить num - я не могу вспомнить, когда я делал приведение enum в прошлый раз. И я делаю много программирования на C #.

2 голосов
/ 12 мая 2010
enum MyEnum : int
{
    Open = 1,
    Closed = 2,
    Exit = 4
}

Это также упоминается здесь .

Однако это не позволяет избежать приведения, это позволяет использовать его с типами, отличными от Int32 (который является типом перечисления по умолчанию).

Короче говоря, да, вы можете указать тип, но нет, вы все равно должны его привести.

1 голос
/ 12 мая 2010

Есть несколько веских причин и, вероятно, много плохих для преобразования значений перечисления в целые, я предполагаю, что у вас есть веская причина;).

Если вы выполняете много инт-преобразования, может оказаться полезным метод расширения, вот быстрый метод расширения:

public static int EnumCast(this Enum theEnum)
{
    return (int)((IConvertible)theEnum);
}

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

[Test]
public void EnumCastTest()
{
    Assert.That(MyEnum.Exit.EnumCast(), Is.EqualTo(4));
}
0 голосов
/ 12 мая 2010

Вы можете указать другой базовый тип, используя:

enum : byte MyEnum { ... }

Но это не устраняет необходимость преобразования в байт (если вы действительно этого хотите). Перечисления в C # позволяют вам обычно просто забыть о базовом типе, если это не требуется для вашего приложения.

Тебе действительно нужно целое число? Можно фактически сохранить строковое представление значения перечисления в базе данных, а затем воссоздать значение перечисления из строки в более поздней точке, см. Этот вопрос .

MSDN дает хороший учебник о том, что можно и чего не следует перечислять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...