c# - C# 7.3 处理通用枚举约束的可能错误

标签 c# generics enums constraints c#-7.3

<分区>

以下代码无法在 C# 7.3 中编译,即使它确实支持约束为枚举的泛型:

using System;
public class Test<T> where T: Enum
{
    public void Method()
    {
        if (!Enum.TryParse<T>("something", out var value))
            throw new Exception("Oops");
    }
}

我使用 Enum 约束的其他代码确实有效,所以我拥有所有内容的正确版本,它似乎无法调用另一个也被限制为 枚举

这是一个错误还是我误解了它应该如何工作。

最佳答案

你需要一个额外的约束:

public class Test<T> where T: struct, Enum
{
    public void Method()
    {
        if (!Enum.TryParse<T>("something", out var value))
            throw new Exception("Oops");
    }
}

只有 where T : Enum , 你可以调用 new Test<Enum>().Method(); -- 即传入 Enum类型,而不是任何特定类型的枚举。添加struct意味着您必须传入特定类型的枚举。

更具体地说,Enum.TryParse<T>有约束 where T : struct , 所以你需要在你的方法中匹配这个约束。

关于c# - C# 7.3 处理通用枚举约束的可能错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622216/

相关文章:

java - 集合中的泛型

c# - 位字段的 Enum.GetName()?

ios - Objective-C 外部常量属性到 Swift 枚举的转换

c# - 当我读取 500MB FileStream 时出现 OutOfMemoryException

c# - 在 C# 中生成返回查找列表或预加载静态列表更好吗?

c# - MEF。如何清理默认容器?

c# - 记录运行测试抛出的异常

c# - 泛型开放和封闭构造类型

generics - C# 添加两个泛型值

c - 是什么让 C 语言中的常量更好,宏还是枚举?