我有一些枚举
enum BasicEnum
{
BasicValue1,
BasicValue2
//...
}
我想要的是与
类似的东西public void Foo<TEnum>(TEnum someEnum)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
switch (someEnum)
{
case BasicEnum.BasicValue1:
//...
break;
case BasicEnum.BasicValue2:
//...
break;
}
}
所有TEnum
类型仅包含BasicEnum
中显示的值。
当然这些代码没有被编译,所以我试着把它改成这个:
public void Foo<TEnum>(TEnum someEnum)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
BasicEnum basicEnum = (BasicEnum)someEnum;
switch (basicEnum)
{
//...
}
}
正如我所料,我再次出现错误'无法将类型'TEnum'转换为'BasicEnum''
找到像
这样的技巧并不困难var value = Convert.ToInt32(someEnum);
var basicValue = (BasicEnum)value;
但是这个解决方案似乎并不是我喜欢的那个。有没有更好的办法?
答案 0 :(得分:2)
使用:
( BasicEnum )Enum.ToObject( typeof( BasicEnum ), someEnum )
答案 1 :(得分:1)
给出以下枚举
public enum FirstEnum
{
FirstEnum1,
FirstEnum2,
FirstEnum3
}
public enum SecondEnum
{
SecondEnum1,
SecondEnum2,
SecondEnum3
}
您可以通过执行以下操作将第二个枚举转换为第一个枚举。
SecondEnum secEnum = SecondEnum.SecondEnum2;
FirstEnum firstEnum = (FirstEnum)Enum.ToObject(typeof(FirstEnum), secEnum);
firstEnum
现在将等于FirstEnum2
您还可以创建一个通用方法将您的枚举转换为BasicType(即FirstEnum)
public FirstEnum ConvertToFirstEnum(object enumToConvert)
{
FirstEnum value = (FirstEnum)Enum.ToObject(typeof(FirstEnum), enumToConvert);
return value;
}
并按以下方式调用该函数:
FirstEnum firstEnum = ConvertToFirstEnum(SecondEnum.SecondEnum3);
firstEnum
的值将等于FirstEnum3
答案 2 :(得分:0)
它不是最漂亮的,但你可以使用(添加适当的强化检查):
BasicEnum basicEnum = (BasicEnum)(object)someEnum;
答案 3 :(得分:0)
如果我明白你需要的话,我会和var success = BasicEnum.TryParse(someEnum.ToString(), out basicEnum)
一起去。