首页 > 解决方案 > C# 7.3 枚举约束:为什么我不能使用可为空的枚举?

问题描述

既然我们有枚举约束,为什么编译器不允许我编写这段代码?

public static TResult? ToEnum<TResult>(this String value, TResult? defaultValue)
    where TResult : Enum
{
    return String.IsNullOrEmpty(value) ? defaultValue : (TResult?)Enum.Parse(typeof(TResult), value);
}

编译器说:

错误 CS0453 类型“TResult”必须是不可为空的值类型才能将其用作泛型类型或方法“Nullable”中的参数“T”

标签: c#enumsroslync#-7.3

解决方案


你可以,但你必须添加另一个约束:struct约束。

public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}

推荐阅读