【发布时间】:2014-10-20 09:17:16
【问题描述】:
这段代码:
var userType = viewModel.UserType == UserType.Sales
? new Sales()
: new Manager();
给我这个编译器错误信息:
无法确定条件表达式的类型,因为存在 'Models.Sales' 和 'Models.Manager' 之间没有隐式转换。
为什么我不能根据条件的结果初始化 var?还是我在这里做错了什么?
编辑:@Tim Schmelter,我没有看到那个帖子,我能找到的只有 int 和 null、bool 和 null:
但没有自定义类型。
【问题讨论】:
-
编译器会抱怨,因为即使您使用类型推断,可以从条件运算符返回的两个表达式也必须可转换为通用类型。
-
条件运算符的两边都必须返回兼容的类型。此外,变量只能初始化为兼容类型。 var 关键字允许隐式类型化变量,类型仍然必须在编译时确定,不能在运行时确定。您需要为此使用
dynamic。 -
用外行的话来说——你不能回答“
userType是什么类型”这个问题,所以编译器也不能。如果用类型替换var,会是什么类型? -
var不是object,但即使是它也不会编译,因为条件运算符不允许您将不兼容的类型分配给变量。如果你想这样做,你必须使用if。
标签: c# ternary-operator