C# 具有十进制值或类似值的枚举
基本上我想用十进制值定义一个枚举,但这是不可能的。另一种选择是:C# 具有十进制值或类似值的枚举,c#,winforms,combobox,enums,C#,Winforms,Combobox,Enums,基本上我想用十进制值定义一个枚举,但这是不可能的。另一种选择是: public static class EstadoRestriccion { public const decimal Valur1 = 0; public const decimal Value2 = 0.5M; public const decimal Value3 = 1; }; 但是我需要在一个组合框中添加这些常量,其中要显示的选项应该是常量的名称,SelectedItem应该返回值(0,0.5
public static class EstadoRestriccion
{
public const decimal Valur1 = 0;
public const decimal Value2 = 0.5M;
public const decimal Value3 = 1;
};
但是我需要在一个组合框中添加这些常量,其中要显示的选项应该是常量的名称,SelectedItem
应该返回值(0,0.5M,1)或类似的值。我知道这是可能的,但它是丑陋的
使用enum,我可以轻松地做到这一点:comboBox.DataSource=enum.GetValues(typeof(MyEnum))代码>
根据我的要求模拟枚举的最佳方法是什么?十进制的静态只读数组怎么样
public static readonly decimal[] myValues = new[] {0, 0.5M, 1};
字典可能是个不错的选择
Dictionary
可能是一个很好的候选者-允许您命名值
var values = new Dictionary<string,decimal>();
values.Add("Value1", 0m);
values.Add("Value2", 0.5m);
values.Add("Value3", 1m);
var values=newdictionary();
添加(“值1”,0米);
添加(“值2”,0.5m);
添加(“值3”,1m);
这可以封装在一个类中,这样您只需通过索引公开一个getter,而不是整个字典接口。没有简单的方法<代码>枚举
仅接受整数值。您输入的代码片段很好
const decimal
和static readonly decimal
之间有一点差别。一是直接评价;编译器用其值替换名称。相反,readonly
每次都会通知代码引用字段并从中获取值。您可以观察为什么readonly
与引用类型一起使用,而const
不能使用(字符串除外)。您可以稍微更改您的类:
public class EstadoRestriccion
{
public static readonly EstadoRestriccion Value1 = new EstadoRestriccion("Value1", 0);
public static readonly EstadoRestriccion Value2 = new EstadoRestriccion("Value2", 0.5M);
public static readonly EstadoRestriccion Value3 = new EstadoRestriccion("Value3", 1);
private static readonly EstadoRestriccion[] values = new EstadoRestriccion[] { Value1, Value2, Value3 };
private string name;
private decimal value;
private EstadoRestriccion(string name, decimal value)
{
this.name = name;
this.value = value;
}
public static EstadoRestriccion[] GetValues()
{
return values;
}
public override string ToString()
{
return this.name;
}
};
一些十进制
转换和/或将值
更改为公共财产。是。OP在问题中确实提到这是不可能的,但希望有其他选择。我不明白。为什么枚举支持十六进制,但不支持十进制、浮点、双精度???@Overflow012,因为hexadecimal
实际上是一个整数。enum
仅支持整数常量,这些常量以常用方式(1、2、4、16、32等)使用,即2的幂。这使程序员能够组合许多选项(例如FileMode.Open | FileMode.Append
)。但是,decimal
、float
和double
类型在C#中不是整数,因此它们不受支持。您也可以让字典静态只读
,并使用初始值设定项列表静态初始化它。这会更像enum IMO。@Joce-你仍然可以在这样的字典上调用Add
。你就是无法替换字典。哼。对。:-/有没有办法将字典(或任何类型的复杂对象)声明为编译时常量?@Joce-不太可能。这就是为什么要将这些对象包装在隐藏额外功能的类中。@Overflow012-返回一个副本。或者编写一个可以完成所需工作的包装器(实现迭代器)。