如果DateTime类型函数中有任何Exception Occures应该返回什么?

时间:2016-02-11 14:00:50

标签: c# .net

这是相同的代码。我在catch块中遇到错误,因为我想知道什么可以返回

public static DateTime ToDate(this object val)
{
    try
    {
       return Convert.ToDateTime(val);
    }
    catch 
    {
        return ;
    }
}

3 个答案:

答案 0 :(得分:2)

您不应该使用异常处理来尝试转换为DateTime。如果转化失败,请使用DateTime.TryParse并返回Nullable<DateTime>

例如:

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

def get_two_nums():
    ...
    ...
    op = ...
    num1 = ...
    num2 = ...
    answer = ...
    return op, num1, num2, answer

def question():
    op, num1, num2, answer = get_two_nums()
    response = int(input("What is {} {} {}? ".format(num1, op, num2)))
    if response == answer:
        # the rest of your logic here

答案 1 :(得分:1)

您可以使用类似DateTime.MaxValue(或MinValue)的sentinel value,也可以返回null(只要您将签名更改为 DateTime?(可为空的DateTime)< / p>

答案 2 :(得分:0)

在这种情况下返回应该是明显的值。

如果没有明显的价值,那么您在错误的地方进行异常处理。或者也许您应该捕获该异常并抛出不同的类型。