C# 泛型中不接受Enum.TryParse,仅限于Enum
我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,它接受一个字符串并将其转换为一个枚举,然后执行一些为简洁起见而跳过的其他操作。 问题是,它抱怨Enum.TryParse需要一个不可为null的类型,它抱怨t可为null;看似System.Enum可为null,但实际的Enum不可为null。 是我做错了什么,还是有办法解决这个问题C# 泛型中不接受Enum.TryParse,仅限于Enum,c#,generics,enums,C#,Generics,Enums,我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,它接受一个字符串并将其转换为一个枚举,然后执行一些为简洁起见而跳过的其他操作。 问题是,它抱怨Enum.TryParse需要一个不可为null的类型,它抱怨t可为null;看似System.Enum可为null,但实际的Enum不可为null。 是我做错了什么,还是有办法解决这个问题 private T GetEnumFilter<T>(string strValue) where T : Enum { retur
private T GetEnumFilter<T>(string strValue) where T : Enum
{
return Enum.TryParse(strValue, out T value) ? value : throw new Exception("Invalid value");
}
我已经看到了这个答案和样本,但看不出我做错了什么
看似System.Enum可为null,但实际的Enum不可为null
是的,就像System.ValueType是引用类型一样,但值类型本身不是
您只需添加一个结构约束:
私有T GetEnumFilterstring值,其中T:struct,Enum
这将编译,例如:
私有静态T GetEnumFilterstring值,其中T:struct,Enum=>
Enum.TryParsevalue,out T结果?结果:抛出新的ExceptionInvalid值;
看似System.Enum可为null,但实际的Enum不可为null
是的,就像System.ValueType是引用类型一样,但值类型本身不是
您只需添加一个结构约束:
私有T GetEnumFilterstring值,其中T:struct,Enum
这将编译,例如:
私有静态T GetEnumFilterstring值,其中T:struct,Enum=>
Enum.TryParsevalue,out T结果?结果:抛出新的ExceptionInvalid值;
您不应该使用变量名来隐藏参数名。使用不同的名称表示输出T值和?value:@ckuri:已经有答案表明抱歉,在简化我的代码时犯了几个错误。感谢@HereticMonkey指出了错误,你不应该用变量名来掩盖你的参数名。使用不同的名称表示输出T值和?value:@ckuri:已经有答案表明抱歉,在简化我的代码时犯了几个错误。感谢@HereticMonkey指出了错误。感谢@Jon给出了惊人的快速回答。我已经修复了在简化SO时引入的问题中的代码错误,但我缺少的是对struct的超级简单添加。感谢@Jon给出了惊人的快速回答。我已经修复了在简化SO时引入的问题中的代码错误,但我缺少的是对struct的超级简单添加。