将“null”值赋给Nullable 单行“如果”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将“null”值赋给Nullable 单行“如果”相关的知识,希望对你有一定的参考价值。

我有一个像这样的班级

public class MyClass
{
    public int Id { get; set; }
    public Nullable<DateTime> ApplicationDate { get; set; }
    ....
}

现在我试图像这样填充MyClass的对象

DataTable dt = DBHelper.GetDataTable(sql, conn);
DataRow dr = dt.Rows[0];

MyClass oMyClass = new MyClass();
oMyClass.Id = (int)dr["Id"];
oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? null : Convert.ToDateTime(dr["AppDate"]); 
//Above line gives an error
....

分配应用程序日期值会出错

Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'System.DateTime'

我在这里错过了什么?

答案

你需要将null投射到DateTime?

oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value 
    ? (DateTime?)null 
    : Convert.ToDateTime(dr["AppDate"]); 

这是因为编译器确定conditional operator的结果类型的方式;行为是设计的:

first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。

由于null本身is of null type,因此没有转换或来自它,你需要通过强制转换来帮助编译器。

另一答案
oMyClass.ApplicationDate =
    dr["ApplDate"] == DBNull.Value ?
    (DateTime?)null :
    Convert.ToDateTime(dr["AppDate"]);

所有编译器都知道,有一件事评估为null而另一件评估为DateTime。编译器抱怨,因为它无法从一个转换为另一个,因此您可以将它们转换为可以同时为值的东西。

请注意,DateTime?Nullable<DateTime>的缩写。 另请注意,您只需要转换null值,因为DateTime?DateTime之间存在隐式转换,因此编译器可以自行进行转换。

另一答案

试试这个:

oMyClass.ApplicationDate = 
    dr["ApplDate"] == DBNull.Value ? (DateTime?)null : 
                                     Convert.ToDateTime(dr["AppDate"]); 

您还可以将强制转换应用于最后一个表达式。

另一答案

您需要将“null”转换为Nullable

试试这段代码:

oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["AppDate"]);
另一答案

您可以使用default,它将分配未初始化类型的默认值。

oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? default(Nullable<DateTime>) : Convert.ToDateTime(dr["AppDate"]); 

更多例子

bool isHappy = default(bool); //isHappy = false
int number = default(int); //number = zero
string text = default(text); // text = null
MyObject myObject = default(MyObject); // myObject = null
DateTime? date = default(DateTime?); //date = null
另一答案
DateTime? dt = (DateTime?)null;

要么

Nullable<DateTime> dt = (Nullable<DateTime>)null;

以上是关于将“null”值赋给Nullable 单行“如果”的主要内容,如果未能解决你的问题,请参考以下文章

c语言中能把一个二维数组的值赋给一个一维数组吗

DRF解析组件以及序列化组件

怎么将sql中select语句选出的值赋给个变量。C#中。

将嵌套dict的值赋给python中的列表

我们不能将一个以0(零)开头的值赋给变量吗?例如:a = 0123。抛出错误“无效令牌”[重复]

如何将JS里变量的值赋给文本框