对';var';关键字和三元运算符?:

本文关键字:三元 运算符 var 关键字 | 更新日期: 2023-09-27 18:00:02

如果在编译时解析了var关键字,下面的工作原理是什么?

class A {
}
class B : A {
}
int k = 1;
var x = (k < 0) ? new B() : new A();

编辑:
我终于明白,问题不在于var本身,而在于?:算子的行为。出于某种原因,我认为以下可能:

object x = something ? 1 : ""

这根本不可能:)

相关问题(关于三元运算符):
为什么在三元运算符中赋值null失败:null和int之间没有隐式转换?

对';var';关键字和三元运算符?:

结果的类型为A,因为这两个变量的类型都是A,并且其中至少有一个是直接的A类型(不是通过一些转换)。

编译器查看三元表达式的两个部分,如果其中一个是另一个的子类型,则整个表达式将成为更通用的超类型。

然而,如果两者都不是直接的公共类型,则会发生编译器错误,这可能是因为它不知道要为您升级多少(而且感觉不到)。

请参阅此处:

条件运算符(?:)根据布尔表达式的值返回两个值中的一个。以下是条件运算符的语法。

condition ? first_expression : second_expression;

[…]

first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

结果为A。确认它的一个简单方法是将鼠标放在var上。

我还没有测试过这个退化的情况。但我敢打赌,要么(1)编译器抱怨,要么(2)"x"是"A"类型。