如何使用数字创建枚举?
-
22-10-2019 - |
题
是否可以仅使用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>
此外,您可以拥有用于设置默认值的枚举,...
希望这可以帮助