C# 为什么?:运算符不使用nullable<;int>;分配?
我正在为我的数据库创建一个对象,我发现了一件奇怪的事情,我不明白: 我有一个应该通过ID引用“语言”的对象,但它可以为null,因此我的属性是C# 为什么?:运算符不使用nullable<;int>;分配?,c#,.net,operators,C#,.net,Operators,我正在为我的数据库创建一个对象,我发现了一件奇怪的事情,我不明白: 我有一个应该通过ID引用“语言”的对象,但它可以为null,因此我的属性是int?(null) 因此,首先我尝试使用对象初始值设定项: myObject = new MyObject() { myNullableProperty = language == null ? null : language.id; } 但它不起作用!它告诉我null不能转换为int 但是如果我将它放在if/else结构中,我可以将null
int?(null)
因此,首先我尝试使用对象初始值设定项:
myObject = new MyObject()
{
myNullableProperty = language == null ? null : language.id;
}
但它不起作用!它告诉我null不能转换为int
但是如果我将它放在if/else
结构中,我可以将null放在var中,然后将它分配给我的属性
为什么会这样?这是因为类型不匹配。必须将空值强制转换为int类型。您可以尝试将
空值强制转换为int?
,因为?:
运算符要求两个操作数返回相同的类型:
myNullableProperty = language == null ? (int?)null : language.id
原因是,当使用?
运算符时,:
的左侧和右侧必须来自同一类型和类型(null)=typeof(int)
so:
myNullableProperty = language == null ? (int?)null : language.id;
很可能null被解释为显然无法分配给int的对象。您可能希望使用myNullableProperty=language==null?(int?)null:language.id代码>由于语法错误,您的代码将无法编译-如果是复制/粘贴错误,请通过编辑来更正。好的,但是如果我在if(language==null){languageId=null;}中执行此操作,为什么{…}正在工作?您还可以对冒号的另一面进行强制转换(或提升或包装),如下所示:language==null?null:(int?)language.id
。