[英]How to convert an Enum which is a generic parameter to another Enum?
我有一些枚举
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;
但是这种解决方案似乎并不是我最喜欢的解决方案。 有没有更好的办法?
采用:
( BasicEnum )Enum.ToObject( typeof( BasicEnum ), someEnum )
鉴于以下枚举
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
它不是最漂亮的,但是您可以使用(添加适当的强制检查):
BasicEnum basicEnum = (BasicEnum)(object)someEnum;
如果我了解您的需求,我会选择var success = BasicEnum.TryParse(someEnum.ToString(), out basicEnum)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.