C#根据三元条件初始化var
本文关键字:三元 条件 初始化 var | 更新日期: 2023-09-27 18:27:04
此代码:
var userType = viewModel.UserType == UserType.Sales
? new Sales()
: new Manager();
给我这个编译器错误消息:
无法确定条件表达式的类型,因为存在"Models.Sales"answers"Models.Manager"之间没有隐式转换。
为什么我不能根据条件的结果初始化var?还是我在这里做错了什么?
编辑:@Tim Schmelter,我没有看到那个帖子,我能找到的只有int
和null
,bool
和null
:
无法确定条件表达式的类型,因为';字符串';和';System.DBNull';
无法确定条件表达式的类型,因为';int';并且<空>
无法确定条件表达式的类型,因为';int';和'<空>#39;
但没有自定义类型。
您需要将第一种可能性转换为常见的基本类型或接口,例如:
var userType = viewModel.UserType == UserType.Sales
? (IUser)new Sales()
: new Manager();
否则,编译器不知道应该创建什么类型,并将使用Sales
,因此在尝试分配Manager
实例时会失败。
因为:
first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。
在您的代码中,不可能从Sales
转换为Manager
,反之亦然。所以它们是不兼容的类型,在这种情况下编译器无法确定类型。C#是静态类型语言(大部分),变量的类型不能是动态,除非它被定义为动力学。
您需要显式声明userType
为Sales
和Manager
的公共类型。例如,如果它们都源自User
,则执行以下操作:
User userType = viewModel.UserType == UserType.Sales
? new Sales()
: new Manager();