2012-05-23 101 views
2

我的問題是如何獲得枚舉變量的值?如何獲取枚舉變量的值?

enter image description here 請看附件截圖...「hatas」是一個標誌枚舉。我想 得到「HasError」 - 「NameOrDisplayNameTooShort」錯誤來顯示它們。

using System; 

namespace CampaignManager.Enums 
{ 
    [Flags] 
    public enum CampaignCreaterUpdaterErrorMessage 
    { 
     NoError = 0, 
     HasError = 1, 
     NameOrDisplaynameTooShort = 2, 
     InvalidFirstName = 3, 
    } 
} 

我試過了;

Messagebox.Show(hatas); // it's showing InvalidFirstName somehow... 

非常感謝您的幫助......

回答

2

第一件事:如果你想在你的枚舉使用FlagsAttribute您需要的兩個大國像這樣定義的值:

[Flags] 
public enum CampaignCreaterUpdaterErrorMessage 
{ 
    NoError = 0, 
    HasError = 1, 
    NameOrDisplaynameTooShort = 2, 
    InvalidFirstName = 4, 
} 

爲了得到一個標記的枚舉的部分,你可以試試:

var hatas = CampaignCreaterUpdaterErrorMessage.HasError | CampaignCreaterUpdaterErrorMessage.NameOrDisplaynameTooShort; 
    var x = (int)hatas; 

    for (int i=0; i<Enum.GetNames(typeof(CampaignCreaterUpdaterErrorMessage)).Length; i++) 
    { 
     int z = 1 << i; // create bit mask 

     if ((x & z) == z) // test mask against flags enum 
     { 
      Console.WriteLine(((CampaignCreaterUpdaterErrorMessage)z).ToString()); 
     } 
    } 

對於讓潛在價值的嘗試鑄造:

Messagebox.Show(((int)hatas)ToString()); 

在你的榜樣,是的ToString通過越來越對CampaignCreaterUpdaterErrorMessage枚舉類型,返回枚舉的字符串表示默認調用。

通過轉換爲枚舉的基礎默認類型int,您可以獲得整數值的ToString。

+0

謝謝您的回答。但是MessageBox.Show((int)hatas);給我編譯時錯誤如下;參數類型'int'不能分配給參數類型'string'。 –

+0

糟糕。固定。試試這個:'Messagebox.Show(((int)hatas)ToString());' –

+0

再次感謝,但現在它變得「3」了。我想要「HasError」 - 「NameOrDisplayNameTooShort」。類似的東西; 「發現錯誤;應用程序HasError和NameOrDisplayNameTooShort」.... –

1

如下所示,需要將enum轉換/ unbox爲int。

(int)CampaignCreaterUpdaterErrorMessage.NoError 
(int)CampaignCreaterUpdaterErrorMessage.HasError 
+0

我不明白..你可以寫一點太長的解釋嗎?,請... –

0

試試這個:

Messagebox.Show(CampaignCreaterUpdaterErrorMessage.NameOrDisplaynameTooShort);

+0

不錯的嘗試Charley14 :)但它不是答案。無論如何,感謝您回答這個問題...... –