如何将任何int转换为c#中的任何泛型Enum ?



因为枚举不能保证是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();

相关内容

  • 没有找到相关文章

最新更新