为什么编译器在这种情况下无法确定操作数的类型?

dot*_*NET 5 c#

抓我的头.以下陈述有什么问题?

var EncFunc = (encrypt ? Encryption.Encrypt : Encryption.Decrypt);
Run Code Online (Sandbox Code Playgroud)

encryptbool,两个函数Encryption.EncryptEncryption.Decrypt具有相同的类型Func<string, string>,但它告诉我:

CS0173无法确定条件表达式的类型,因为"方法组"和"方法组"之间没有隐式转换

我已经经历过这个这个,但无法理解为什么编译器无法确定这两个函数的类型.

NB我知道这可以通过显式转换来修复.我对理解"为什么"部分更感兴趣.

Mar*_*o Z 7

我认为以下解释了为什么编译器在这方面遇到了困难.假设我们有:

string MyMethod() { return ""; }
Run Code Online (Sandbox Code Playgroud)

我们不能将该方法分配给var,换句话说我们不能使用它:

// Not valid.
var method = MyMethod;
Run Code Online (Sandbox Code Playgroud)

那是因为可以使用任意数量的代表,例如:

delegate string MyDelegate();
Run Code Online (Sandbox Code Playgroud)

有了这个,我们现在有两个选项,似乎编译器假设一个在另一个上是错误的:

// Valid.
Func<string> myFunc = MyMethod;

// Valid.
MyDelegate myDel = MyMethod;
Run Code Online (Sandbox Code Playgroud)

编辑:为了完成,我添加了对此的引用(OP在评论中提到).