C#中受限制的通用委托

时间:2010-01-14 11:25:34

标签: c# generics delegates

我想要一个约束返回两种类型之一的委托; ActionResult 字符串。这可能吗?

4 个答案:

答案 0 :(得分:6)

不,这是不可能的(至少不是在C#4及以下)。对泛型类型参数的“或”约束不支持。

也没有约束将类型参数限制为精确类型。所有约束都限制了类型参数的基类型。他们不能限制你继承他们。

答案 1 :(得分:2)

不,不是。此外,这样做有什么好处?除非这两种类型有共同之处,否则你无法对返回类型做任何事情。

考虑一些调用委托的代码:

var returnValue = someDelegate();

在这种情况下,var是什么类型的? stringActionResult的唯一共同祖先是object,所以你可以从中得到所有。从静态类型的角度来看,您也可以将返回类型声明为object

答案 2 :(得分:2)

正如其他答案所解释的那样,你不能这样做,但是你可以通过为每种返回类型传递不同的连续性来解决这个问题:

public delegate void MultiPathDelegate(Action<ActionResult> arAction, Action<string> strAction);

因此,在委托中而不是调用者中检查返回类型。

答案 3 :(得分:0)

与Zakalwe一样,我也没有看到这样做的任何意义,但是......

您可以定义两个分别接受Func<string>Func<ActionResult>的重载方法。私有方法可以使用Delegate并使用它做更多事情。