作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,它接受一个字符串并将其转换为枚举(然后执行为了简洁起见,我跳过了一些其他内容)。问题是,它提示 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并且看不到我做错了什么。
最佳答案
Seemingly System.Enum is nullable but actual enums aren't nullable.
是的,就像System.ValueType
是引用类型一样,但值类型本身不是。
您只需要添加一个struct
约束:
private T GetEnumFilter<T>(string value) where T : struct, Enum
编译,例如:
private static T GetEnumFilter<T>(string value) where T : struct, Enum =>
Enum.TryParse(value, out T result) ? result : throw new Exception("Invalid value");
关于c# - Enum.TryParse 在仅限于 Enum 的泛型中不被接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64790983/
我是一名优秀的程序员,十分优秀!