C#显式初始化Enum

时间:2010-12-10 16:26:39

标签: c# enums initialization

我有以下声明:

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;

第二次编辑:

没关系,我发现了我的方式错误,感谢这个帖子:

How to convert from System.Enum to base integer?

关键短语,让我意识到我做错了,是:“枚举是值类型(内部仅由整数常量表示),而System.Enum是引用类型”。

所以我不想这样说:

private Enum _statusValue = 0;

我想说这个,这完全有效:

private Enum _statusValue = null;

感谢那些试图提供帮助的人。

2 个答案:

答案 0 :(得分:9)

您总是可以稍微区别地声明您的枚举并添加默认状态(实际上是suggested by Microsoft):

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

或者简单地说(自动编号从0开始):

public enum MyEnum
{
    Default,
    One,
    Two
}

这将允许您执行以下操作:

private MyEnum _enum = MyEnum.Default;

答案 1 :(得分:2)

我的问题基本上是错误的。我错误地认为Enum(就像枚举)是一个值类型,但它实际上是一个引用类型。

所以我不想这样说:

private Enum _statusValue = 0; 

我想说这个,这完全有效:

private Enum _statusValue = null; 

感谢那些试图提供帮助的人。