代码之家  ›  专栏  ›  技术社区  ›  Reed

C空合并运算符,int/long if值为-1

  •  0
  • Reed  · 技术社区  · 6 年前

    我有以下代码将变量分配给“nullable”int类型。因为0在我的用例中有效,-1表示数据库中的空值。

    此代码在按预期选择时工作正常

    int value = (reader["Value"] as int?) ?? -1;
    

    但是,当我对更新和插入执行反向操作时。我该如何表示一个值 DBNull.Value 如果它的值是-1?

    我觉得自己很亲近,但我似乎无法让它按预期工作。

    insertQuery.Parameters.Add("@Value", SqlDbType.Int).Value = value ?? -1 : (object)DBNull.Value;
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   vendettamit    6 年前

    改变你的状况 value ?? -1 : (object)DBNull.Value; value == -1 ? (object)DBNull.Value : value

        2
  •  3
  •   Jon Skeet    6 年前

    您正在尝试使用一个空合并运算符和条件的混合物 ?: 操作员。听起来你不会 null 作为输入,因此不能使用空合并运算符-只需要条件运算符:

    (code as before).Value = value == -1 ? (object) DBNull.Value : value;
    

    演员到 object 必须为条件运算符提供“公共”结果类型。