PIC*_*ain 11 c# grid properties numeric custom-type
是否可以使用C#中的数字来创建枚举?在我的程序中,我有一个变量Gain,它只能设置为1,2,4和8.我使用一个propertygrid控件来显示和设置这个值.如果我要创建这样的枚举...
private enum GainValues {One, Two, Four, Eight}
Run Code Online (Sandbox Code Playgroud)
我创建了GainValues类型的增益变量,然后propertygrid中的下拉列表只显示增益变量的可用值.问题是我希望增益值以数字方式读取而不是单词.但我无法创建这样的枚举:
private enum GainValues {1,2,4,8}
Run Code Online (Sandbox Code Playgroud)
那么还有另一种方法吗?也许创建一个自定义类型?
LBu*_*kin 16
这不是怎么enums工作的.枚举允许您命名特定值,以便您可以更明智地在代码中引用它.
如果要限制有效数字的域,则枚举可能不是正确的选择.另一种方法是创建一个可用作增益的有效值集合:
private int[] ValidGainValues = new []{ 1, 2, 4, 8};
Run Code Online (Sandbox Code Playgroud)
如果您想使这更加类型安全,您甚至可以使用私有构造函数创建自定义类型,将所有有效值定义为静态,公共实例,然后以这种方式公开它们.但是你仍然必须给每个有效值一个名字 - 因为在C#中,成员/变量名不能以数字开头(尽管它们可以包含它们).
现在,如果您真正想要的是将特定值分配给GainValues枚举中的条目,您可以这样做:
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 };
Run Code Online (Sandbox Code Playgroud)
Adr*_*ian 10
已经有很多答案,但我会提供另一种解决方案.如果您希望控件显示实际数字而不是控件中数字的英文单词,则可以使用数据注释.
using System.ComponentModel.DataAnnotations;
private enum GainValues
{
[Display(Name = "1")]
One,
[Display(Name = "2")]
Two,
[Display(Name = "4")]
Four,
[Display(Name = "8")]
Eight
}
Run Code Online (Sandbox Code Playgroud)
这在您希望使用友好名称而不是成员实际名称的程序中的任何位置都很有用.
小智 5
如果我正确理解了原始问题,答案可能是:
您只需使用下划线前缀即可在检查器中的枚举中列出数字,例如:
public enum MyNumbers{ _1, _2, _3, _4 };
public MyNumbers myNumbers;
Run Code Online (Sandbox Code Playgroud)
希望这是有帮助的!