抓我的头.以下陈述有什么问题?
var EncFunc = (encrypt ? Encryption.Encrypt : Encryption.Decrypt);
Run Code Online (Sandbox Code Playgroud)
encrypt是bool,两个函数Encryption.Encrypt和Encryption.Decrypt具有相同的类型Func<string, string>,但它告诉我:
CS0173无法确定条件表达式的类型,因为"方法组"和"方法组"之间没有隐式转换
我已经经历过这个和这个,但无法理解为什么编译器无法确定这两个函数的类型.
NB我知道这可以通过显式转换来修复.我对理解"为什么"部分更感兴趣.
我认为以下解释了为什么编译器在这方面遇到了困难.假设我们有:
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在评论中提到).
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |