【问题标题】:Why ?: operator does not work with nullable<int> assignation?为什么 ?: 运算符不适用于 nullable<int> 赋值?
【发布时间】:2012-01-12 08:40:46
【问题描述】:

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

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

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

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

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

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

为什么会这样?

【问题讨论】:

  • 由于语法错误,您的代码将无法编译 - 如果是复制/粘贴错误,请通过编辑进行更正。

标签: c# .net operators


【解决方案1】:

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

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

【讨论】:

  • 您也可以投射(或抬起或包裹)冒号的另一“边”,如下所示:language == null ? null : (int?)language.id
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 好的,但是如果我在 if(language==null){languageId = null;}else{...} 中这样做,为什么?
      猜你喜欢
      • 2013-09-22
      • 2012-02-19
      • 1970-01-01
      • 2016-07-25
      • 2022-01-05
      • 2018-07-04
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多