我想要一个约束返回两种类型之一的委托; ActionResult 或字符串。这可能吗?
答案 0 :(得分:6)
不,这是不可能的(至少不是在C#4及以下)。对泛型类型参数的“或”约束不支持。
也没有约束将类型参数限制为精确类型。所有约束都限制了类型参数的基类型。他们不能限制你继承他们。
答案 1 :(得分:2)
不,不是。此外,这样做有什么好处?除非这两种类型有共同之处,否则你无法对返回类型做任何事情。
考虑一些调用委托的代码:
var returnValue = someDelegate();
在这种情况下,var
是什么类型的? string
和ActionResult
的唯一共同祖先是object
,所以你可以从中得到所有。从静态类型的角度来看,您也可以将返回类型声明为object
。
答案 2 :(得分:2)
正如其他答案所解释的那样,你不能这样做,但是你可以通过为每种返回类型传递不同的连续性来解决这个问题:
public delegate void MultiPathDelegate(Action<ActionResult> arAction, Action<string> strAction);
因此,在委托中而不是调用者中检查返回类型。
答案 3 :(得分:0)
与Zakalwe一样,我也没有看到这样做的任何意义,但是......
您可以定义两个分别接受Func<string>
和Func<ActionResult>
的重载方法。私有方法可以使用Delegate并使用它做更多事情。