此代码:
var userType = viewModel.UserType == UserType.Sales
? new Sales()
: new Manager();
给我这个编译器错误消息:
由于存在,因此无法确定条件表达式的类型 没有隐式转换' Models.Sales'和' Models.Manager'。
为什么我不能根据条件的结果初始化var?或者我在这里做错了什么?
编辑:@Tim Schmelter,我没有看到那篇文章,我找到的只有int
和null
,bool
和null
:
但没有自定义类型。
答案 0 :(得分:3)
您需要将第一种可能性转换为公共基本类型或接口,例如:
var userType = viewModel.UserType == UserType.Sales
? (IUser)new Sales()
: new Manager();
否则编译器不知道它应该创建什么类型,并且将使用Sales
,因此在尝试分配Manager
实例时会失败。
答案 1 :(得分:2)
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。
在您的代码中,无法从Sales
转换为Manager
,或者反之亦然。因此,它们是不兼容的类型,在这种情况下,编译器无法确定类型。 C#是静态类型语言(大部分),变量类型不能动态,除非它被定义为动态。
答案 2 :(得分:1)
您需要明确声明userType
是Sales
和Manager
的常见类型。例如,如果它们都来自User
,那么请执行以下操作:
User userType = viewModel.UserType == UserType.Sales
? new Sales()
: new Manager();