2010-12-10 92 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