簡體   English   中英

如何使用數字創建枚舉?

[英]How can I create an enum using numbers?

是否可以使用C#中的數字來創建枚舉? 在我的程序中,我有一個變量Gain,它只能設置為1,2,4和8.我使用一個propertygrid控件來顯示和設置這個值。 如果我要創建這樣的枚舉...

 private enum GainValues {One, Two, Four, Eight}

我創建了GainValues類型的增益變量,然后propertygrid中的下拉列表只顯示增益變量的可用值。 問題是我希望增益值以數字方式讀取而不是單詞。 但我無法創建這樣的枚舉:

 private enum GainValues {1,2,4,8}

那么還有另一種方法嗎? 也許創建一個自定義類型?

這不是enums工作方式。 枚舉允許您命名特定值,以便您可以更明智地在代碼中引用它。

如果要限制有效數字的域,則枚舉可能不是正確的選擇。 另一種方法是創建一個可用作增益的有效值集合:

private int[] ValidGainValues = new []{ 1, 2, 4, 8};

如果您想使這更加類型安全,您甚至可以使用私有構造函數創建自定義類型,將所有有效值定義為靜態,公共實例,然后以這種方式公開它們。 但是你仍然必須給每個有效值一個名字 - 因為在C#中,成員/變量名稱不能以數字開頭(盡管它們可以包含它們)。

現在,如果您真正想要的是將特定值分配給GainValues枚舉中的條目 ,您可以這樣做:

private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 };

已經有很多答案,但我會提供另一種解決方案。 如果您希望控件顯示實際數字而不是控件中數字的英文單詞,則可以使用數據注釋。

using System.ComponentModel.DataAnnotations;

private enum GainValues 
{
 [Display(Name = "1")]
 One,
 [Display(Name = "2")]
 Two,
 [Display(Name = "4")] 
 Four, 
 [Display(Name = "8")]
 Eight
}

這在您希望使用友好名稱而不是成員實際名稱的程序中的任何位置都很有用。

如果我正確理解了原始問題,答案可能是:

您只需使用下划線前綴即可在檢查器中的枚舉中列出數字,例如:

public enum MyNumbers{ _1, _2, _3, _4 };
public MyNumbers myNumbers;

希望這是有幫助的!

private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 }

應該管用。

更新:好的,我想我在那里誤解了你。

也許您可以使用KeyValuePair<string, int> ,然后將名稱和值分別綁定到Key和Value屬性。

在枚舉中使用顯式值賦值:

private enum GainValues 
{
   One = 1, 
   Two = 2, 
   Four = 4, 
   Eight = 8
}

然后通過這些值枚舉如下:

GainValues currentVal;

foreach(currentVal in Enum.GetValues(typeof(GainValues))
{
   // add to combo box (or whatever) here
}

然后你可以根據需要轉換為/從int開始:

int valueFromDB = 4;

GainValues enumVal = (GainValues) valueFromDB;

// enumVal should be 'Four' now

不幸的是,C#中的符號可以包含數字,但不能以數字開頭 所以你將不得不使用文字。

或者,你可以做Gain1,Gain2等。

或者你可以完全放棄枚舉並使用常量和內部處理。

您可以使用一個自定義列表作為下拉列表的數據源。

代碼背后:

using GainItem = KeyValuePair<string, int>;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<GainItem> dic = new List<GainItem>();
            dic.Add(new GainItem("First", 1));
            dic.Add(new GainItem("Second", 2));
            dic.Add(new GainItem("Fourth", 4));
            ddl.DataSource = dic;
            ddl.DataBind();
        }


    }

    protected void btn_Click(object sender, EventArgs e)
    {
        Response.Write(ddl.SelectedValue);
    }
}

Asp頁面:

    <div>
    <asp:DropDownList runat="server" ID="ddl" DataValueField="Value" DataTextField="Key" />
    <asp:Button ID="btn" runat="server" OnClick="btn_Click" />
   </div>

此外,您可以使用枚舉來設置默認值,...

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM