C# 如何向datetime变量插入null或空字符串?
我从xml文件中获取数据,有时日期是空的 我有以下代码: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
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合并运算符。