C # явная инициализация для Enum - PullRequest
1 голос
/ 10 декабря 2010

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

private Enum _statusValue;

Что я действительно хотел бы сказать:

private Enum _statusValue = 0;

, хотя я знаю, что это избыточно.Просто мне нравится явно указывать инициализацию.

Но это недопустимо.

Есть ли какой-нибудь простой способ указать инициализацию для такого рода объявлений?

РЕДАКТИРОВАТЬ - Позвольте мне повторить попытку.

Вот придуманный / упрощенный пример того, что яя делаю.

using System;

namespace EnumTesting
{
   public enum EFixedPhoneUsability
   {
      UnknownValue,       // Should not occur?
      IsUsable,           // User is near the telephone
      NotUsable,          // User not near the telephone
      BeingUsed,          // Busy
      DoNotDisturb,       // This is phone physical state, not user attitude
      CallsForwarded      // This is phone physical state
   }

   public enum EMobilePhoneConnectivity
   {
      UnknownValue,       // Should not occur?
      OnNetIdle,          // I.e., usable
      OnNetBusy,          // Being used
      NoConnection        // Turned off, in elevator or tunnel or far from civilization
   }

   public class Program
   {
      public Enum StatusValue;

      static void Main(string[] args)
      {
         Program p = new Program();

         p.StatusValue = EMobilePhoneConnectivity.NoConnection;

         int i = (int) (EMobilePhoneConnectivity) p.StatusValue;

         p.StatusValue = EFixedPhoneUsability.DoNotDisturb;

         i = (int) (EFixedPhoneUsability) p.StatusValue;
      }
   }
}

Итак, мой вопрос, могу ли я добавить универсальный инициализатор к этому утверждению?

      public Enum StatusValue;

ВТОРОЕ РЕДАКТИРОВАНИЕ:

Не берите в голову, яобнаружили ошибку моих путей, благодаря этой записи:

Как преобразовать из System.Enum в базовое целое число?

Ключевая фраза, которая заставила меня понятьто, что я делал неправильно, заключается в следующем: «перечисления являются типами значений (и внутренне представлены только целочисленными константами), а System.Enum является ссылочным типом».

Поэтому я не хочу говорить это:

private Enum _statusValue = 0;

Я хочу сказать это, что совершенно справедливо:

private Enum _statusValue = null;

Спасибо тем, кто пытался помочь.

Ответы [ 2 ]

10 голосов
/ 10 декабря 2010

Вы всегда можете объявить свой Enum немного по-другому и добавить состояние по умолчанию (на самом деле , предложенное Microsoft ):

public enum MyEnum
{
    Default = 0,
    One = 1, 
    Two = 2
}

Или просто (автоматическая нумерация начинается с 0):

public enum MyEnum
{
    Default,
    One,
    Two
}

Что позволит вам сделать следующее:

private MyEnum _enum = MyEnum.Default;
2 голосов
/ 11 июля 2011

Мой вопрос был в основном ошибочным. Я ошибочно думал, что Enum (как enum) является типом значения, но на самом деле это ссылочный тип.

Поэтому я не хочу говорить это:

private Enum _statusValue = 0; 

Я хочу сказать это, что совершенно верно:

private Enum _statusValue = null; 

Спасибо тем, кто пытался помочь.

...