为什么?:operator不能使用nullable <int>赋值?</int>

时间:2012-01-12 08:40:46

标签: c# .net operators

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

我有一个对象应该用ID引用“语言”,但这可以为null,所以我的属性是int?(Nullable<int>)

所以我首先尝试使用对象初始化器:

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

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

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

为什么这样做?

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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