IEa*_*els 1 c# implicit-conversion
我有这个奇怪的代码(永远不会在生产代码中使用)产生奇怪的编译错误,我想知道更多关于这种行为,
string MyMethod(string s)
{
return s == null ? null : null;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
无法确定条件表达式的类型,因为
null和之间没有隐式转换null
什么解释了这种行为?
什么解释了这种行为?
C#5规范,第7.14节:
?:运算符的第二个和第三个操作数x和y控制条件表达式的类型.
- 如果x有X型,y有Y型,那么[...]
- 如果x和y中只有一个具有类型,并且x和y都可以隐式转换为该类型,那么这就是条件表达式的类型.
- 否则,无法确定表达式类型,并发生编译时错误.
你的情况是最后的这些选项-表达null没有类型,因此既没有x和y有型,所以你会得到一个编译时错误.
您尝试使用条件运算符表达式的结果这一事实与表达式的类型无关 - 编译器的工作原理是"从里到外" - 它找到表达式的类型然后检查你对它的使用是正确的.
在这种情况下,是没有类型,因此编译失败.
在C#1中,有一个"null类型"被认为是null文字的类型- 但是这个概念在C#3规范中被删除了.(MS没有完整的C#2规范;它只是C#2规范的一组补充.)