Kir*_*nko 40 c# enums roslyn 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);
}
Run Code Online (Sandbox Code Playgroud)
编译器说:
错误CS0453类型'TResult'必须是非可空值类型才能在泛型类型或方法'Nullable'中将其用作参数'T'
Pat*_*man 55
你可以,但你必须添加另一个约束:struct约束.
public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}
Run Code Online (Sandbox Code Playgroud)
mjw*_*lls 17
因为System.Enum是一个类,所以你不能声明一个类型的变量Nullable<Enum>(因为Nullable<T>只有当Ta 是可能的struct).
从而:
Enum? bob = null;
Run Code Online (Sandbox Code Playgroud)
不会编译,你的代码也不会编译.
这绝对是奇怪的(因为Enum它本身就是一个类,但是Enum你在代码中定义的具体是a struct)如果你以前没有遇到它,但它显然是一个class(不是一个struct)文档和源代码.