是否可以仅使用C#中的数字进行枚举?在我的程序中,我有一个可变量,增益,只能设置为1、2、4和8。我正在使用PropertyGrid控件显示和设置此值。如果我要创建这样的枚举...

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

我使我的增益变量是类型增益值,然后在属性格里德中的下拉列表只会显示增益变量的可用值。问题是我希望增益值以数字读取不是单词。但是我无法创建这样的枚举:

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

那么还有另一种方法吗?也许创建自定义类型?

有帮助吗?

解决方案

这不是方法 enums 工作。 枚举允许您命名特定值,以便您可以更合理地在代码中引用它。

如果要限制有效数字的域,则枚举可能不是正确的选择。 另一种方法是创建一个集合 有效值 可以用作收益:

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

如果您想使此类型更具类型为Afte,甚至可以使用私有构造函数创建自定义类型,将所有有效值定义为静态,公共实例,然后以这种方式公开它们。但是,您仍然必须将每个有效值一个名称给出一个名称 - 因为在C#成员/变量名称中不能以数字开头(尽管它们可以包含它们)。

现在,如果您真正想要的是将特定值分配给收益值枚举中的条目, 你可以做:

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> 然后分别将名称和值绑定到键和值属性。

不幸的是,C#中的符号可以包含数字,但不能 开始 与数字。因此,您将不得不使用单词。

另外,您可以做GANE1,GAIN2,等。

或者,您可以完全放弃枚举,并使用常数和内部处理。

在枚举中使用明确的价值分配:

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

您可以将一个自定义列表用作下拉列表的数据源。

背后的代码:

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归因
不隶属于 StackOverflow
scroll top