C# 将null从分析字符串值的单行条件语句传递到DataTable

C# 将null从分析字符串值的单行条件语句传递到DataTable,c#,.net,datetime,nullable,system.data.datatable,C#,.net,Datetime,Nullable,System.data.datatable,我有一个应用程序,它在固定宽度的文本文件中循环,将每一行读入一个字符串变量,并使用.Substring()方法查找给定字段的数据。对于给定的字段,它会检查内容是否只是空格,或者其中是否确实有“数据”,即除了空格以外的任何内容。例如,如果有数据,并且该数据表示一个日期,则对该数据运行DateTime.Parse(),并将其传递给C#DataTable中DateTime类型的字段;但是,如果没有数据——只有空格,我只想向字段传递一个空值。下面是一段代码来说明: var dataTable = new

我有一个应用程序,它在固定宽度的文本文件中循环,将每一行读入一个字符串变量,并使用.Substring()方法查找给定字段的数据。对于给定的字段,它会检查内容是否只是空格,或者其中是否确实有“数据”,即除了空格以外的任何内容。例如,如果有数据,并且该数据表示一个日期,则对该数据运行DateTime.Parse(),并将其传递给C#DataTable中DateTime类型的字段;但是,如果没有数据——只有空格,我只想向字段传递一个空值。下面是一段代码来说明:

var dataTable = new DataTable();

dataTable.Columns.Add("Application_Date").DataType = Type.GetType("System.DateTime");

while (!sr.EndOfStream)
{
    string row = sr.ReadLine();

    if (row.Substring(0, 1) == "2" && row.Substring(42, 1) == "T")
    {
        DataRow dr = dataTable.NewRow();

        dr["Application_Date"] = row.Substring(124, 8) != "        " ?
                                 DateTime.Parse(row.Substring(124, 4) +
                                 "-" + row.Substring(128, 2) + "-" +
                                 row.Substring(130, 2)) :
                                 null as DateTime?;                                                         

     }
}
我的问题是,当我尝试运行此程序时,它会抛出一个错误,说它需要一个DBNull(
无法将列“Application\u Date”设置为null。请改用DBNull。

但是当我尝试简单地传递一个DBNull时,它告诉我它不能在DateTime和DBNull之间转换(
无法确定条件表达式的类型,因为在'System.DateTime'和'System.DBNull'之间没有隐式转换。


我这里缺少什么?

您需要将
日期时间
强制转换为
对象
,以便在条件中使用它:

dr["Application_Date"] = (...) ? (object)DateTime.Parse(...) : DBNull.Value;

使用空合并运算符:

dr["Application_Date"] = (object)nullableDateTime ?? DBNull.Value;

谢谢你,这就成功了!我现在也明白为什么了…再次感谢!我可能在这里漏掉了一些东西,但我也遇到了同样的问题,只能通过将“(object)”放在语句的“DBNull.Value”部分前面来解决它(而不是放在上面答案所建议的DateTime.Parse部分前面)。仅供参考-在VB.NET中,您需要使用
DataTable1.Rows(I)(j)=If(xarray(I,j),CObj(DBNull.Value))