我希望能得到一些帮助。我需要一个函数,它可以接受一个字符串,它是一个字典的键,一个必须被强制转换为枚举类型。
字典键将是与枚举对应的数字。我需要知道如何将int转换为enum变量的枚举。
这是我编写的函数。这可能比我的解释更清楚。
string GetEnum(string keyName, Enum enumType)
{
var defaultOut = "";
Model.Form.TryGetValue(keyName, out defaultOut);
if(defaultOut != ""){
return EnumDescriptionUtility.GetDescription((enumType)Convert.ToInt32(defaultOut));
}
else{
return defaultOut;
}
}
之前我使用过大部分代码。之前的区别是enumType被硬编码为实际的枚举。我想将所有重复内容卸载到函数中。
感谢任何帮助。
答案 0 :(得分:1)
我不是100%肯定我理解你的Q,但是如果我这样做,你想要给一个给定的枚举值?
这是我最近创建的一种扩展方法,用于将值解析为给定的枚举。这种情况下的值是枚举的字符串名称。
public static T ToEnum<T>(this string val) where T : struct
{
T t;
if (Enum.TryParse(val, out t))
return t;
return default(T);
}
你会像以下一样使用它:
public enum MyEnum{
A = 1,
B = 2,
C = 3
}
public enum MyOtherEnum{
D = 1,
E = 2,
F = 3
}
string str = "A";
MyEnum yourEnum = str.ToEnum<MyEnum>();
string str2 = "A";
MyOtherEnum yourOtherEnum = str.ToEnum<MyOtherEnum>();
答案 1 :(得分:0)
所以,如果我理解正确,你知道它们的枚举类型和整数值。你没有包含关于你的枚举的任何信息,所以我设置了一个简单的例子。
public enum Letter
{
A,
B,
C
}
public enum Number
{
One,
Two,
Three
}
因此,如果你知道类型和整数值,你可以得到这样的枚举:
public static Enum GetEnum(Type type, int val)
{
Enum e = null;
if (type == typeof(Letter))
{
e = (Letter)val;
}
else if (type == typeof(Number))
{
e = (Number)val;
}
return e;
}
您需要检查其类型才能使用它。也许是这样的:
public static string StringFromEnum(Enum e)
{
string result = null;
if (e.GetType() == typeof(Letter))
{
result = ((Letter)e).ToString();
}
else if (e.GetType() == typeof(Number))
{
result = ((Number)e).ToString();
}
return result;
}
public static void Main(string[] args)
{
int val1 = 2;
Type type1 = typeof(Letter);
int val2 = 0;
Type type2 = typeof(Number);
var result1 = GetEnum(type1, val1);
var result2 = GetEnum(type2, val2);
Console.WriteLine("result1 {0}", StringFromEnum(result1));
Console.WriteLine("result2 {0}", StringFromEnum(result2));
Console.ReadKey();
}
答案 2 :(得分:0)
如果您只想获取表示给定类型和int的枚举名称的字符串,可以使用Enum.GetName()
public enum Letter
{
A,
B,
C
}
public enum Number
{
One,
Two,
Three
}
public static void Main(string[] args)
{
int val1 = 2;
Type type1 = typeof(Letter);
int val2 = 0;
Type type2 = typeof(Number);
var result1 = Enum.GetName(type1, val1);
var result2 = Enum.GetName(type2, val2);
Console.WriteLine("result1 {0}", result1);
Console.WriteLine("result2 {0}", result2);
Console.ReadKey();
}
如果你想要实际的枚举,我认为你必须做一些类似于其他答案的事情。听起来你想使用Type变量进行强制转换:
Type type1 = typeof(Letter);
var result = (type1) val1; // wrong
而且我认为你不能这样做。即使使用泛型,您也必须在某个时刻指定类型。