现在我们有枚举约束,为什么编译器不允许我编写这段代码?
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类型&#39; TResult&#39;必须是不可为空的值类型才能将其用作参数&#39; T&#39;通用类型或方法&#39; Nullable&#39;
答案 0 :(得分:48)
您可以,但必须添加另一个约束:struct
约束。
public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}
答案 1 :(得分:15)
由于db.Foo.aggregate([{ $match: { obj: { $in: ["<uuid>", "<uuid>"] } } },{ $sort: { lm: -1 } },{ $group: { _id: "$obj", ts: { $first: "$ts" } } }]);
是一个类,因此您无法声明System.Enum
类型的变量(因为只有Nullable<Enum>
为Nullable<T>
时才可以T
)。
因此:
struct
将无法编译,您的代码也不会编译。
这绝对很奇怪(因为Enum? bob = null;
本身就是一个类,但是如果你之前没有遇到它,那么你在代码中定义的特定Enum
是Enum
,但根据docs和源代码显然是struct
(不是class
)。