在Func <t> </t>上创建泛型类型约束

时间:2014-10-04 22:18:44

标签: c# lambda expression

我想知道这是否可行:

public class Foo<T> where T : Func<T>

public class Foo<T> where T : Func<>

似乎编译器告诉我它不可能。我想我可以在构造函数中抛出一个运行时异常,但是希望它有一个编译器错误。

有关这方面的任何方法吗?

2 个答案:

答案 0 :(得分:6)

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

这个答案总结得很好 C# Generics won't allow Delegate Type Constraints

答案 1 :(得分:0)

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

public class Foo<T> where T : Delegate

public class Foo<T> where T : MulticastDelegate

那是您可以获得的最接近的东西。