Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么?:运算符不使用nullable<;int>;分配?_C#_.net_Operators - Fatal编程技术网

C# 为什么?:运算符不使用nullable<;int>;分配?

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

我正在为我的数据库创建一个对象,我发现了一件奇怪的事情,我不明白:

我有一个应该通过ID引用“语言”的对象,但它可以为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