Использование целочисленного перечисления - PullRequest
0 голосов
/ 05 октября 2010

Возможно ли сделать перечисление без необходимости приведения?

class Program
{
   private enum Subject 
   { 
       History = 100, Math =200, Geography = 300
   }
    static void Main(string[] args)
    {
      Console.WriteLine(addSubject((int) Subject.History)); //Is the int cast required.
    }
    private static int addSubject(int H)
    {
        return H + 200;
    }
}

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Я попытаюсь разобраться с частью бизнес-логики:

class Program
{
   [Flags]   // <--
   private enum Subject 
   { 
       History = 1, Math = 2, Geography = 4    // <-- Powers of 2
   }
    static void Main(string[] args)
    {
        Console.WriteLine(addSubject(Subject.History));
    }
    private static Subject addSubject(Subject H)
    {
        return H | Subject.Math;
    }
}
1 голос
/ 05 октября 2010

Нет, потому что тогда вы потеряете безопасность типов (что является проблемой с перечислениями C ++).

Полезно, чтобы перечисляемые типы были действительными типами, а не просто именованными целыми числами. Поверь мне, время от времени разыгрывать не проблема. Однако в вашем случае я не думаю, что вы действительно хотите использовать enum вообще. Похоже, вы действительно следите за значениями, так почему бы не создать класс с открытыми константами?

Кстати, это заставляет меня съеживаться:

private static int addSubject(int H)
{
    return H + 200;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...