对'var'关键字和三元运算符有疑问?:

Osc*_*ros 4 c# var type-inference ternary-operator

如果var在编译时解析关键字,以下如何工作?

class A {
}
class B : A {
}

int k = 1;
var x = (k < 0) ? new B() : new A();
Run Code Online (Sandbox Code Playgroud)

编辑:
我终于明白问题不是关于var自身,而是关于?:运营商的行为.出于某种原因,我认为以下可能是可能的:

object x = something ? 1 : ""

这根本不可能:)

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

Meh*_*dad 13

结果是类型A,因为两个变量都是类型A,并且它们中的至少一个是直接类型A(不是通过某种转换).

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

但是,如果两者都不是直接的常见类型,则会发生编译器错误,可能是因为它不知道要为您进行多少转发(并且它不想找出来).

看到这里:

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

condition ? first_expression : second_expression;
Run Code Online (Sandbox Code Playgroud)

[...]

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