C# 如果DateTime类型函数中发生任何异常,应该返回什么?
这是相同的代码。我在catch块中出错,因为我想知道可以返回什么C# 如果DateTime类型函数中发生任何异常,应该返回什么?,c#,.net,C#,.net,这是相同的代码。我在catch块中出错,因为我想知道可以返回什么 public static DateTime ToDate(this object val) { try { return Convert.ToDateTime(val); } catch { return ; } } 您可以使用类似的DateTime.MaxValue(或MinValue),也可以返回null(只要将签名更改为DateTime?(可
public static DateTime ToDate(this object val)
{
try
{
return Convert.ToDateTime(val);
}
catch
{
return ;
}
}
您可以使用类似的DateTime.MaxValue(或MinValue),也可以返回null(只要将签名更改为DateTime?(可为null的DateTime)您不应该使用异常处理来尝试强制转换到
DateTime
。如果转换失败,请使用DateTime.TryParse
并返回Nullable
例如:
public static DateTime? ToDate(this object val, IFormatProvider formatProvider = null)
{
if(val == null) return null;
if(val is DateTime) return (DateTime) val;
if(val is DateTime?) return (DateTime?) val;
if(formatProvider == null) formatProvider = System.Globalization.DateTimeFormatInfo.CurrentInfo;
string dateStr = val.ToString();
DateTime dt;
if(DateTime.TryParse(dateStr, formatProvider, System.Globalization.DateTimeStyles.None, out dt))
return dt;
return null;
}
现在,您可以区分有效的DateTime
和无法解析的日期时间:
object dtObj = "2016-02-11";
DateTime? dtorNot = dtObj.ToDate(); // valid, dtorNot.Value contains the DateTime
dtObj = "foo";
dtorNot = dtObj.ToDate(); // invalid, dtorNot.HasValue == false
在这种情况下,返回值应该是显而易见的
如果没有明显的值,那么您在错误的位置处理异常。或者,您应该捕获该异常并抛出另一种类型。为什么不抛出异常?如果出现问题,请修复它。您不想处理异常?不要使用try-catch,而是使用
DateTime.TryParse
and如果转换失败,返回DateTime?
。这完全是上下文特定的。有时你真的想忽略坏数据,有时你应该立即停止。我们不知道。问题是:我们当然没有上下文来决定应该在这里返回什么。我想你可能也没有,在这个时候因此,正确的答案是:抛出异常,让知道上下文的更高级别的代码来决定。