【发布时间】:2020-11-11 17:09:30
【问题描述】:
我认为我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,该函数接受 string 并将其转换为 enum(然后执行一些我已经跳过的其他内容)简洁)。
问题是,它抱怨 Enum.TryParse 需要一个不可为空的类型,它抱怨 T 是可空的;看似 System.Enum 可以为空,但实际的枚举不能为空。
我在这里做错了什么还是有办法解决这个问题。
private T GetEnumFilter<T>(string strValue) where T : Enum
{
return Enum.TryParse(strValue, out T value) ? value : throw new Exception("Invalid value");
}
我在https://stackoverflow.com/a/8086788/1093406 看到了这个答案和the dotnet samples 的示例,但看不出我做错了什么。
【问题讨论】:
-
你不应该用变量名来隐藏你的参数名。为
out T value和? value :使用不同的名称 -
@ckuri:已经有答案表明
-
抱歉,在简化我的 SO 代码时出现了一些错误。感谢@HereticMonkey 指出错误