C# 如何将作为泛型参数的枚举转换为另一个枚举?
我有一些枚举C# 如何将作为泛型参数的枚举转换为另一个枚举?,c#,.net,generics,enums,type-conversion,C#,.net,Generics,Enums,Type Conversion,我有一些枚举 enum BasicEnum { BasicValue1, BasicValue2 //... } 我想要的是类似于 public void Foo<TEnum>(TEnum someEnum) where TEnum : struct, IComparable, IFormattable, IConvertible { switch (someEnum) { case BasicEnum.BasicVa
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”
要找到像这样的把戏并不难
var value = Convert.ToInt32(someEnum);
var basicValue = (BasicEnum)value;
但这个解决方案似乎不是我非常喜欢的。有更好的办法吗 它不是最漂亮的,但您可以使用(添加适当的铸造检查): 使用:
如果我了解您需要什么,我会选择
var success=BasicEnum.TryParse(someEnum.ToString(),out BasicEnum)
。给出以下枚举
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
您还可以创建一个通用方法,将枚举转换为基本类型(即FirstEnum)
并按如下方式调用该函数:
FirstEnum firstEnum = ConvertToFirstEnum(SecondEnum.SecondEnum3);
firstEnum
的值将等于FirstEnum3
try parse是枚举类上的一个静态方法。它不能用于BasicEnumno我不认为有更好的方法。演员阵容无法避免。最多可以考虑使用<代码> TyPARSE < /代码>。代码>Enum.TryParse(someEnum.ToString(),out basicValue)似乎比Convert.ToInt好
public enum FirstEnum
{
FirstEnum1,
FirstEnum2,
FirstEnum3
}
public enum SecondEnum
{
SecondEnum1,
SecondEnum2,
SecondEnum3
}
SecondEnum secEnum = SecondEnum.SecondEnum2;
FirstEnum firstEnum = (FirstEnum)Enum.ToObject(typeof(FirstEnum), secEnum);
public FirstEnum ConvertToFirstEnum(object enumToConvert)
{
FirstEnum value = (FirstEnum)Enum.ToObject(typeof(FirstEnum), enumToConvert);
return value;
}
FirstEnum firstEnum = ConvertToFirstEnum(SecondEnum.SecondEnum3);