gpt4 book ai didi

c# - Enum.TryParse 在仅限于 Enum 的泛型中不被接受

转载 作者:行者123 更新时间:2023-12-02 02:32:46 32 4
gpt4 key购买 nike

我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,它接受一个字符串并将其转换为枚举(然后执行为了简洁起见,我跳过了一些其他内容)。问题是,它提示 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com