首页 > 解决方案 > 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约束的其他代码确实有效,因此我拥有所有内容的正确版本,它似乎无法调用另一个也被限制为Enum.

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

标签: c#genericsenumsconstraintsc#-7.3

解决方案


你需要一个额外的约束:

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,所以你需要在你的方法中匹配这个约束。


推荐阅读