C# 使用??操作人员
我正在尝试使用??操作人员我知道我可以使用==相等运算符测试dbnull。但是我想用??操作人员以下是迄今为止我所拥有但尚未投入使用的内容:C# 使用??操作人员,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在尝试使用??操作人员我知道我可以使用==相等运算符测试dbnull。但是我想用??操作人员以下是迄今为止我所拥有但尚未投入使用的内容: @Html.Label(Model.CustomerDate.ToString() ?? "", new { id = "CustomerDate" }) 但它不起作用。Model.CustomerDate是日期时间吗?类型。我已经搜索了,没有找到与上述场景相关的结果。任何帮助都将不胜感激 更新#1 根据Joel的
@Html.Label(Model.CustomerDate.ToString() ?? "", new { id = "CustomerDate" })
但它不起作用。Model.CustomerDate是日期时间吗?类型。我已经搜索了,没有找到与上述场景相关的结果。任何帮助都将不胜感激 更新#1 根据Joel的建议,我尝试了以下方法: @Label(Model.CustomerDate.ToString(),新的{id=“CustomerDate”}) 这不起作用,因为该字段是DateTime?。我收到错误“对象引用未设置为对象的实例”。我必须处理null、dbnull和有效的datetime值 更新#2 由于Joel在下面的回答,我能够找到一个有效的解决方案: 注意:在??下面的部分,如果不是,则在null时将不呈现控件:
@Html.Label(Model.CustomerDate?.ToString() ?? " ", new { id = "CustomerDate" })
DBNull
与C#null
不同,并且不适用于空合并?
操作符。您已经与DBNull.Value
进行了比较
除此之外,DBNull.ToString()
将已经生成一个空字符串,这样您就可以简单地删除空合并操作,如下所示:
@Html.Label(Model.CustomerDate.ToString(), new { id = "CustomerDate" })
如果为空,则会得到所需的空字符串;如果不为空,则会使用进程当前区域性的格式(通常为服务器默认值,但在ASP.Net上下文中,有时可以设置从浏览器推断的内容)从DateTime值创建字符串
如果还需要处理可为null的类型,可以执行以下操作:
@Html.Label(Model.CustomerDate?.ToString() ?? "", new {id = "CustomerDate"})
什么类型是
Model.CustomerDate
?“不工作”是什么意思?你真的是指DbNull
?或者您是否有可空的DateTime
属性?Model.CustomerDate是DateTime?乔,谢谢你的帮助!在您编写的上述示例中,我收到错误“对象引用未设置为对象的实例”。我必须处理null、dbnull和有效的日期时间值。@RobertSmith IfModel。CustomerDate
是一个datetime
值,它是一种值类型,不应为null。如果是对象
,您可能需要重新思考如何创建模型。Joel,不,这不是DateTime,而是DateTime?@RobertSmith那么我认为您需要model.CustomerDate?.ToString()??“”
另一方面,我们必须处理DBNull,因为ADO.Net早于可空类型的日期。我真的很想看到一个ADO.NETV2,它完全取代了DBNull,它将成为nullables(或者类似于使用新的nullable引用类型),以及一些其他小的API修复程序。