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");
    }
}
我的其他使用Enum约束的代码都可以正常工作,因此我拥有所有版本的正确版本,似乎似乎无法调用也被限制为an的另一个方法Enum。
这是一个错误还是我误解了它应该如何工作。
您需要额外的约束:
public class Test<T> where T: struct, Enum
{
    public void Method()
    {
        if (!Enum.TryParse<T>("something", out var value))
            throw new Exception("Oops");
    }
}
使用just where T : Enum,您可以调用new Test<Enum>().Method();-即传入Enum类型,而不是任何特定的枚举类型。添加struct意味着您必须传递特定类型的枚举。
更具体地说,Enum.TryParse<T>具有约束where T : struct,因此您需要在方法中匹配此约束。