我使用以下代码
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());
}
或者我应该在例外时将所有日期指定为空?!
还有其他方法可以单线吗?像tryparse
或其他什么?
答案 0 :(得分:3)
我会尝试创造性。您可以将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());
这可能是你的一个班轮。
答案 1 :(得分:2)
您可以使用DateTime.TryParse()
方法在成功转换时返回true
,否则返回false
。
注意:在ToString()
上调用null
会NullReferenceException
,因此您需要在转化前检查null
值。
试试这个:
if(dsResult.Tables[0].Rows[i]["ActualEndDate"] != null)
DateTime.TryParse(dsResult.Tables[0].Rows[i]["ActualEndDate"].ToString(),
out extensionRequest[i].EndDate);
答案 2 :(得分:1)
您可以检查值是否为null
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?