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(不是通过某种转换).
编译器会查看三元表达式的两个部分,如果其中一个是另一个的子类型,则整个表达式将成为更一般的超类型.
但是,如果两者都不是直接的常见类型,则会发生编译器错误,可能是因为它不知道要为您进行多少转发(并且它不想找出来).
看到这里:
条件运算符(?:)根据布尔表达式的值返回两个值中的一个.以下是条件运算符的语法.
Run Code Online (Sandbox Code Playgroud)condition ? first_expression : second_expression;[...]
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换.