如何解决对\'var\'关键字和三元运算符?的疑问:
|| 如果在编译时解析了“ 0”关键字,那么以下内容如何工作?class A {
}
class B : A {
}
int k = 1;
var x = (k < 0) ? new B() : new A();
编辑:
我终于明白,问题不在于ѭ0本身,而是关于?:
运算符的行为。出于某种原因,我认为可能会发生以下情况:
object x = something ? 1 : \"\"
那根本不可能:)
相关问题(关于三元运算符):
为什么在三元运算符中分配null失败:null和int之间没有隐式转换?
解决方法
结果为
A
类型,因为两个变量均为A
类型,并且至少其中一个变量直接为A
类型(而不是通过某种转换)。
编译器查看三元表达式的两个部分,如果其中一个是另一个的子类型,则整个表达式将成为更通用的超类型。
但是,如果两者都不是通用类型,那么就会发生编译器错误,可能是因为它不知道需要为您升级多少(也不希望找出来)。
看这里:
条件运算符(?:)根据布尔表达式的值返回两个值之一。以下是条件运算符的语法。
condition ? first_expression : second_expression;
[...]
first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。
, 结果是A
。一种简单的确认方法是将鼠标放在var
上。
, 我还没有测试过这种退化的情况。但我敢打赌,要么(1)编译器抱怨,要么(2)\'x \'类型为\'A \'。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。