2010-12-10 54 views
2

我有以下声明:C#显式初始化为枚举

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; 

谢谢那些谁试图帮助。

+0

'私有枚举_statusValue'是一个类型定义。您无法初始化类型定义。 – 2010-12-10 16:29:27

+0

我不认为这是正确的。这不是一个字段的定义吗?它的工作方式类似于字段定义 - 我可以使用其他枚举为其分配一个值,并使用强制转换从其中检索值。 – RenniePet 2010-12-10 17:05:08

+0

@RenniePet:你可以回答你自己的问题,然后接受它。这样就可以解决这个问题。 – dvdvorle 2011-07-11 06:14:13

回答

1

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

所以我不想这样说:

private Enum _statusValue = 0; 

我想这样说,这是完全正确的:

private Enum _statusValue = null; 

谢谢那些谁试图帮助。

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; 
+0

感谢您的建议,但我希望做的是避免引入新的枚举MyEnum,其唯一目的是提供不能使用文字零的语法糖。我已经编辑并扩展了我的问题,如果您再次查看,我会很感激。谢谢。 – RenniePet 2010-12-11 06:58:52

+0

没关系,请参阅我的第二个编辑问题。 – RenniePet 2010-12-11 20:57:20

0

Enum是您用来创建枚举的类型。

这就好比说:

private class _statusValue = null; 
+2

我看不到等值。 “class”是一个语言关键字,“Enum”(或“System.Enum”)是一个类的名称。私人类_statusValue;给出语法错误。私人枚举_statusValue;是一个可以接受的声明,工作正常。 – RenniePet 2010-12-11 06:52:43