使用派生参数的Func

时间:2015-05-05 09:25:52

标签: c# inheritance delegates func

我有几个方法,其参数是派生类型:

bool Method1(ChildType1);
bool Method2(ChildType2);

使用ChildType1ChildType2来自ParentType。

我想要一个可以接受Method1或Method2但是得到编译错误的委托:

Func<ParentType, bool> MyDelegate =  Method1;
  

错误1&#39;方法1&#39;匹配委托&#39; Func&lt; ParentType的,   布尔&GT;&#39;

有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:4)

没有

想想如果可能会发生什么:

Func<ParentType, bool> MyDelegate =  Method1;

//Method1 does not accept a parameter of type ChildType2, but MyDelegate does
MyDelegate(new ChildType2());

这不起作用的原因与您无法将List<Dog>的实例投射到List<Animal>的原因相同 - 因为那样您就可以调用{{ 1}},它必须在运行时抛出异常,因为猫不能被添加到狗的列表中。