C# 如何向datetime变量插入null或空字符串?

C# 如何向datetime变量插入null或空字符串?,c#,winforms,C#,Winforms,我从xml文件中获取数据,有时日期是空的 我有以下代码: try { TimeTo = Convert.ToDateTime(R[15].ToString()); } catch { TimeTo = null ; } 但我得到了一个错误,因为我不能在datetime变量中插入null 我能做什么 thak的提前日期时间是一种值类型,因此不能赋值null。但是 DateTime.MinValue是一个很好的替代品,有助于指出价值的缺失 try { TimeTo = Convert.To

我从xml文件中获取数据,有时日期是空的

我有以下代码:

try { TimeTo = Convert.ToDateTime(R[15].ToString()); }    
catch { TimeTo = null ; }
但我得到了一个错误,因为我不能在datetime变量中插入null

我能做什么


thak的提前

日期时间
是一种值类型,因此不能赋值
null
。但是

DateTime.MinValue
是一个很好的替代品,有助于指出价值的缺失

try { TimeTo = Convert.ToDateTime(R[15].ToString()); }    
catch { TimeTo = DateTime.MinValue; }
另一个选项是使用可为空的类型:

DateTime? TimeTo = null;
并参照如下:

if (TimeTo.HasValue)
   something = TimeTo.Value;
public DateTime? TimeTo { get; set; }
TimeTo = string.IsNullOrEmpty(R[15].ToString()) 
           ? (DateTime?) null 
           : DateTime.Parse(R[15].ToString());

将时间设置为可为null的属性,如下所示:

if (TimeTo.HasValue)
   something = TimeTo.Value;
public DateTime? TimeTo { get; set; }
TimeTo = string.IsNullOrEmpty(R[15].ToString()) 
           ? (DateTime?) null 
           : DateTime.Parse(R[15].ToString());
比try/catch更好的解决方案是执行以下操作:

if (TimeTo.HasValue)
   something = TimeTo.Value;
public DateTime? TimeTo { get; set; }
TimeTo = string.IsNullOrEmpty(R[15].ToString()) 
           ? (DateTime?) null 
           : DateTime.Parse(R[15].ToString());

稍微相切一点,如果你认为R[15]可能不是日期时间,我建议TryParse是一个更好的选择

if(DateTime.TryParse(R[15].ToString(),out TimeTo))
{
     //TimeTo is set to the R[15] date do stuff you need to if it is good
}
else
{
    //TimeTo is default (i.e. DateTime.MinValue) do stuff for a bad conversion (e.g. log, raise exception etc)
}

引用它的另一个有用方法是使用collapse操作符。表达式看起来像
TimeTo??defaultTimeTo
,如果前者为null,则解析为后者。对不起,
是C#中的null合并运算符。