c# - Lambdas 和条件:任何人都可以看到 C# 编译器无法解决以下问题的原因吗?
问题描述
我已经解决了许多与 C# 无法解决用于初始化 var 的条件表达式中的两个 lambda 的斗争。然而,今天我面对的似乎是一对非常简单直接的 lambda,我无法让编译器接受它作为条件表达式的两个结果。编译器使用 if-then-else 构造分别对它们没有问题。
因此,我决定将代码减少到尽可能少的程度以显示问题,并发现我可以将其减少到非常低的水平,但仍然会出现错误。
编译器发出通常的错误:
CS0173 无法确定条件表达式的类型,因为“lambda 表达式”和“lambda 表达式”之间没有隐式转换
以下代码是仍然会生成错误的非常底层代码的三个示例。第一行(test1)应该是足够合理可用的。其他方面是努力通过优先级和显式类型进行澄清。
考虑到我之前已经成功地使用条件在两个更复杂(虽然不是很复杂)的 lambdas 之间进行选择,我惊讶地发现这些极其简单的示例不起作用。
有人知道这里发生了什么吗?
在我的例子中,它是一个使用 C# 7.3 构建的 C# UWP 项目。Visual Studio 未报告任何挂起的更新。
Func<int, int> test1 = true ? (a) => 0 : (a) => 0;
Func<int, int> test2 = true ? ((int a) => (int)0) : ((int a) => (int)0);
Func<int, int> test3 = true ? ((int a) => { return (int)0; }) : ((int a) => { return (int)0; });
解决方案
推荐阅读
- javascript - 使用jquery上传之前如何在客户端压缩文件(如pdf)?
- python - Python,迭代列表列表并更改原始列表
- r - R中口袋妖怪战斗的功能:如何循环攻击直到晕倒?
- javascript - ajax成功响应之前的页面刷新如何在页面刷新后获得响应
- coq - 单例类中的隐式参数
- python - Pytorch:如何获得每个隐藏层的神经元张量?
- arrays - 仅在 typescript React 中对数组的最后一个索引进行样式设置?
- javascript - 输入条件如何影响密码中的字符数?Javascript
- python - 在python中用点导入模块
- php - 如何使用 PDO 存储函数或存储过程的返回结果