在C#中将字符串转换为日期时间时出现null值异常
本文关键字:null 异常 时间 日期 字符串 转换 | 更新日期: 2023-09-27 18:04:48
我使用以下代码
extensionRequest[i].EndDate = DateTime.Parse(dsResult.Tables[0].Rows[i]["ActualEndDate"].ToString());
extensionRequest[i].ExtendedEndDate = DateTime.Parse(dsResult.Tables[0].Rows[i]["ExtendedEndDate"].ToString());
extensionRequest[i].ReceivedDate =Convert.ToDateTime(dsResult.Tables[0].Rows[i]["dReceivedOn"].ToString());
当值来自数据库时,这很好但当返回NULL
值时,会引发异常!!
我应该像下面的代码一样检查所有三个值的值吗
if (dsResult.Tables[0].Rows[i]["dReceivedOn"].ToString()==null){
extensionRequest[i].ReceivedDate="";
}
else{
extensionRequest[i].ReceivedDate =Convert.ToDateTime(dsResult.Tables[0].Rows[i]["dReceivedOn"].ToString());
}
或者我应该在异常时将所有日期分配为null?!
在单行中还有其他方法吗?比如tryparse
什么的?
我会努力发挥创意。您可以将Nullable TryParse
创建为Extension Method
版本:
public static DateTime? TryParseNullable(this DateTime dateTime, string val)
{
DateTime outValue;
return DateTime.TryParse(val, out outValue) ? (DateTime?) outValue : null;
}
然后使用:
extensionRequest[i].EndDate = DateTime.TryParseNullable(dsResult.Tables[0].Rows[i]["ActualEndDate"].ToString());
这可能是你的一句话。
您可以使用DateTime.TryParse()
方法,该方法在成功转换时返回true
,否则返回false
。
注意:在null
上调用ToString()
会抛出NullReferenceException
,因此在转换之前需要检查null
的值。
试试这个:
if(dsResult.Tables[0].Rows[i]["ActualEndDate"] != null)
DateTime.TryParse(dsResult.Tables[0].Rows[i]["ActualEndDate"].ToString(),
out extensionRequest[i].EndDate);
您可以像这个一样检查值是否为空
extensionRequest[i].EndDate = Convert.IsDbNull(dsResult.Tables[0].Rows[i]["ActualEndDate"]) ? null : Convert.ToDateTime(dsResult.Tables[0].Rows[i]["ActualEndDate"]);
我确信.ToString()
不是必需的。
如果将一行缓存到本地变量,它将更具可读性
var row = dsResult.Tables[0].Rows[i];
...
extensionRequest[i].EndDate = Convert.IsDbNull(row["ActualEndDate"]) ? null : Convert.ToDateTime(row["ActualEndDate"]);
确保.EndDate
和其他允许空值。换句话说,就是DateTime?