为什么?:运算符不适用于可为null的<;int>;转让

本文关键字:lt int 转让 gt null 运算符 不适用 适用于 为什么 | 更新日期: 2023-09-27 18:20:01

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

我有一个对象,它应该通过ID引用"语言",但这可能是null,所以我的属性是int?(Nullable<int>)

因此,首先我尝试使用对象初始化器:

myObject = new MyObject() 
{
    myNullableProperty = language == null ? null : language.id;
}

但它不起作用!它告诉我null不能转换为int

但如果我把它放在if/else结构中,我可以把null放在var中,然后把它分配给我的属性。

为什么这样?

为什么?:运算符不适用于可为null的<;int>;转让

您可以尝试将null强制转换为int?,因为?:运算符需要两个操作数返回相同的类型:

myNullableProperty = language == null ? (int?)null : language.id

这是因为类型不匹配。必须将null值强制转换为int类型。

原因是,当使用?运算符时,:的左侧和右侧需要来自同一类型和typeof(null)!=typeof(int),因此:

myNullableProperty = language == null ? (int?)null : language.id;

很可能null被解释为显然不能分配给int的对象。您可能想要使用myNullableProperty = language == null ? (int?)null : language.id;