gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:57:09 25 4
gpt4 key购买 nike

挠我的头。下面的语句有什么问题?

var EncFunc = (encrypt ? Encryption.Encrypt : Encryption.Decrypt);

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

CS0173 Type of conditional expression cannot be determined because there is no implicit conversion between 'method group' and 'method group'

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

注意我知道这可以通过显式转换来解决。我对理解“为什么”部分更感兴趣。

最佳答案

我认为以下解释了为什么编译器对此有困难。假设我们有:

string MyMethod() { return ""; }

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

// Not valid.
var method = MyMethod;

那是因为可以使用任意数量的委托(delegate),例如:

delegate string MyDelegate();

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

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

// Valid.
MyDelegate myDel = MyMethod;

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

关于c# - 为什么在这种情况下编译器无法确定操作数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42547730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com