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

bik*_*868 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的其他使用Enum约束的代码都可以正常工作,因此我拥有所有版本的正确版本,似乎似乎无法调用也被限制为an的另一个方法Enum

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

can*_*on7 7

您需要额外的约束:

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

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

更具体地说,Enum.TryParse<T>具有约束where T : struct,因此您需要在方法中匹配此约束。