我声明了以下枚举:
public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }
如何从TransactionTypeCode.Shipment获取值'S'或从TransactionTypeCode.Receipt获取'R'?
简单地做TransactionTypeCode.ToString()会给出一个Enum名称为“Shipment”或“Receipt”的字符串,因此它不会削减芥末。
答案 0 :(得分:30)
您必须检查枚举的基础类型,然后转换为正确的类型:
public enum SuperTasks : int
{
Sleep = 5,
Walk = 7,
Run = 9
}
private void btnTestEnumWithReflection_Click(object sender, EventArgs e)
{
SuperTasks task = SuperTasks.Walk;
Type underlyingType = Enum.GetUnderlyingType(task.GetType());
object value = Convert.ChangeType(task, underlyingType); // x will be int
}
答案 1 :(得分:2)
我相信Enum.GetValues()正是您所寻找的。 p>
答案 2 :(得分:1)
试试这个:
string value = (string)TransactionTypeCode.Shipment;
答案 3 :(得分:1)
你的枚举的基础类型仍然是int,只是出于某种原因从char
到int
的隐式转换。你的枚举相当于
TransactionTypeCode { Shipment = 83, Receipt = 82, }
还要注意enum
can have any integral type as underlying type except char
,可能是出于某些语义原因。这是不可能的:
TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', }
要获得char
值,您可以使用强制转换。
var value = (char)TransactionTypeCode.Shipment;
// or to make it more explicit:
var value = Convert.ToChar(TransactionTypeCode.Shipment);
第二个导致拳击,因此应该更糟糕。所以可能稍好一点
var value = Convert.ToChar((int)TransactionTypeCode.Shipment);
但是很难看。鉴于性能/可读性的权衡,我更喜欢第一个(演员)版本..
答案 4 :(得分:0)
这就是我通常设置枚举的方式:
public enum TransactionTypeCode {
Shipment("S"),Receipt ("R");
private final String val;
TransactionTypeCode(String val){
this.val = val;
}
public String getTypeCode(){
return val;
}
}
System.out.println(TransactionTypeCode.Shipment.getTypeCode());
答案 5 :(得分:0)
我正在寻找那个,我得到了解决方案 使用转换类
int value = Convert.ToInt32(TransactionTypeCode.Shipment);
看看它如何轻松
答案 6 :(得分:0)
枚举的基础值必须是数字。如果已知基础值的类型,则简单转换将返回枚举的给定实例的基础值。
enum myEnum : byte {Some = 1, SomeMore, Alot, TooMuch};
myEnum HowMuch = myEnum.Alot;
Console.Writeline("How much: {0}", (byte)HowMuch);
输出:多少:3
或(更接近原始问题)
enum myFlags:int {None='N',Alittle='A',Some='S',Somemore='M',Alot='L'};
myFlags howMuch = myFlags.Some;
Console.WriteLine("How much: {0}", (char)howMuch);
//If you cast as int you get the ASCII value not the character.
对我来说这是一个反复出现的问题,我总是忘记一个简单的演员会让你获得价值。