因为枚举不能保证是int类型…
public enum ExampleEnum : int / ulong / whatever
对于枚举不能这样做:
int i = (int)exampleEnum;
然而,在我的情况下,虽然我不知道确切的"枚举类型"正在使用,我可以保证它将是一个"int类型";枚举。
所以我可以这样写:
int i = Convert.ToInt32(exampleEnum);
酷。问题在这里:我不知道如何做相反的(我需要做的),如:
Enum exampleEnum = (Enum)exampleEnum;
有错误:
不能将'int'类型的表达式强制转换为'Enum'类型
我找不到Convert的逆函数。ToInt32枚举(Enum)
这就是问题所在,如果你认为我正在做的事情的更多细节是有用的,我可以提供给你。但简而言之,我正在创建一个通用的GUI方法,它接受任何类型的Enum:
public static int EditorPrefEnumField(string label, Enum defaultValue, string editorPrefString)
并使其工作(以我想要的方式)涉及将Enum与int类型进行转换。
您可以使用Enum.ToObject()
方法。您需要为此指定实际的enum type
。下面是一个封装Enum.ToObject()
的通用方法
public enum TestEnum : int
{
A=1, B=2, C=3
};
public T GetEnumFromInt<T>(int value) where T : Enum
{
return (T)Enum.ToObject(typeof(T), value);
}
private void button1_Click(object sender, EventArgs e)
{
Enum value = GetEnumFromInt<TestEnum>(2);
MessageBox.Show(value.ToString()); // Displays "B"
}
您需要指定您想要的Enum
的具体类型,因为Enum
是抽象类型,并且不能创建抽象类型的实例。
以以下代码为例,我将错误代码存储为Int
:
public class CommonError
{
public int Code { get; set; }
public CommonError FromErrorCode(Enum code, string description = "")
{
Code = (int)Enum.Parse(code.GetType(), code.ToString());
return this;
}
}
但是当我调用它时,我所做的是在不同的枚举中进行解析:
new CommonError().FromErrorCode((int)GeneralErrorCodes.SYSTEM_BASE_ERROR);
酷。问题是这样的:我不知道如何做反向操作(我需要这样做)
相反,你需要Enum类型,例如:
Enum.GetNames(typeof(AnEmumType))
Enum.GetValues(typeof(AnEmumType)).ToList();