在这种情况下合并操作员工作?

这个问题在这里已经有了答案:

  • 无法转换类型'System.DBNull'的对象来键入'System.String` 10个答案
  • C#中两个问号在一起意味着什么? 16个答案

  • DBNullnull不一样,所以你不能使用?? 运营商。 你必须分开处理这个案子。

    更换:

    Make = (string)(rdr["Make"] ?? ""),
    

    有:

    Make =  (rdr["Make"] == System.DBNull.Value ? "" : (string)rdr["Make"]),
    

    SqlDataReader返回一个DBNull对象,它不是C#空 - 它是一个表示数据库中NULL值的对象。

    您有许多选项,并且创建一个方法来处理可能最具可读性的方法,并节省您重复的代码:

    private static string GetStringOrEmpty(object dbValue){
        return dbValue == System.DBNull.Value ? string.Empty : (string)dbValue;
    }
    

    接着

    Make = GetStringOrEmpty(rdr["Make"]),
    

    或者看看Dapper ,它是一个非常小但功能强大的ORM,可以为你处理很多这些东西。

    链接地址: http://www.djcxy.com/p/53847.html

    上一篇: coalescing operator work in this case?

    下一篇: In c# , what does it mean '??'?