假设
假设我们有一个接口,并且为该接口定义了以下扩展方法(它们的实现并不重要)
public interface IPerson;
public class IPersonExtensionMethods
{
public static bool SayHello(this IPerson talker, IPerson listener);
public static bool SayGoodbye(this IPerson talker, IPerson listener);
}
问题
我们知道这两种扩展方法本质上是相同的,因为它们接受 2 个 type 参数IPerson
和 return bool
。现在,假设我们要将 1 个扩展方法分配给Func<IPerson, IPerson, bool>
我们可以使用的类型的委托:
Func<IPerson, IPerson, bool> whatShouldWeSay;
if (sayHello)
{
whatShouldWeSay = IPersonExtensionMethods.SayHello;
}
else
{
whatShouldWeSay = IPersonExtensionMethods.SayGoodbye;
}
但是,如果我们将if
语句转换为简写形式,如下所示:
Func<IPerson, IPerson, bool> whatShouldWeSay = (sayHello)
? IPersonExtensionMethods.SayHello
: IPersonExtensionMethods.SayGoodbye;
我们得到编译错误信息:
无法确定条件表达式的类型,因为 'method.group' 和 'method.group' 之间没有隐式转换
问题
为什么会出现这个错误?是因为委托的性质是扩展方法吗?还是由于速记if
语句如何确定结果类型?还是完全不同的东西?