在传递DateTime?变量到一个方法,编译器说它不能将null值转换为DateTime

Yul*_*ian 1 c# datetime arguments nullable

我有一个TextBox控件,它应该存储一个日期.只要日期不是我的页面中的必填字段(我正在使用Web窗体),我传递的是DateTime?(可为空),而不是连接到数据库并插入适当值的方法的DateTime变量.它看起来像这样.

public void DatabaseMethod(DateTime? myDate)
{
// Insert the appropriate value into the database
}

// I'm calling the above method like this:
DatabaseMethod(String.IsNullOrWhiteSpace(txtContractMyDate.Text) ? null : Convert.ToDateTime(txtContractMyDate.Text));
Run Code Online (Sandbox Code Playgroud)

我从编译器收到的消息类似于"条件语句的类型无法确定,因为'null'和'System.DateTime'之间没有隐式转换".

我可以做以下事情:

DateTime? myDate = null;

if (!String.IsNullOrWhiteSpace(txtContractMyDate.Text))
{
    myDate = Convert.ToDateTime(txtContractStornoDate.Text);
}
Run Code Online (Sandbox Code Playgroud)

然后调用方法如:

DatabaseMethod(myDate);
Run Code Online (Sandbox Code Playgroud)

当然,这没关系,但我无法弄清楚为什么我从编译器得到声明的消息("条件语句的类型无法确定,因为'null'和'System之间没有隐式转换. DateTime'").

Mar*_*čič 5

你需要转换nullDateTime?

DatabaseMethod(String.IsNullOrWhiteSpace(txtContractMyDate.Text) ? (DateTime?)null : Convert.ToDateTime(txtContractMyDate.Text)
Run Code Online (Sandbox Code Playgroud)

  • 永远不要直接使用`Convert.ToDateTime`作为防御性编码器并使用TryParse() (2认同)