C# 在Func上生成泛型类型约束<;T>;

C# 在Func上生成泛型类型约束<;T>;,c#,lambda,expression,C#,Lambda,Expression,我想知道这是否可行: public class Foo<T> where T : Func<T> 公共类Foo其中T:Func 或 公共类Foo其中T:Func 似乎编译器告诉我这是不可能的。我想我可以在构造函数中抛出一个运行时异常,但希望它是一个编译器错误 有什么办法吗?不幸的是,看起来你运气不好Func和Action都是委托类型,不能用作泛型类型约束 这个答案总结得很好 正如另一个答案所提示的,您无法实现Func的泛型类型约束,但是C#7.3允许您执行这样的约束

我想知道这是否可行:

public class Foo<T> where T : Func<T>
公共类Foo其中T:Func

公共类Foo其中T:Func
似乎编译器告诉我这是不可能的。我想我可以在构造函数中抛出一个运行时异常,但希望它是一个编译器错误


有什么办法吗?

不幸的是,看起来你运气不好
Func
Action
都是委托类型,不能用作泛型类型约束

这个答案总结得很好

正如另一个答案所提示的,您无法实现Func的泛型类型约束,但是C#7.3允许您执行这样的约束

public class Foo<T> where T : Delegate
公共类Foo其中T:Delegate

公共类Foo其中T:MulticastDelegate

这是你能得到的最接近的答案。

这里正确的解决方案可能是只接受
T
,然后在你的类中使用
Func
。我考虑过这一点,但我必须像.NET的人一样创建17个重载来支持基本Func情况。:)我知道这很愚蠢,只是想知道。不是说这是一个好主意,但你可以按照这个思路,在Roslyn中进行更改,并使用该编译器编译你的代码。
public class Foo<T> where T : Delegate
public class Foo<T> where T : MulticastDelegate