为什么?:运算符不适用于可为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?
,因为?:
运算符需要两个操作数返回相同的类型:
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;