摘要
我已经被赋予了设置管理软件的任务(对于小型美术师来说,他们的硬件肯定可以应付),但是,我希望在提供给他们之前使它尽可能高效。主要功能已完成,现在主要是修饰和优化。
代码
DateTime DueDate;
try
{
DateTime.TryParse(dteCommission.SelectedDate.Value.Date.ToShortDateString(),
out DueDate);
}
catch(Exception E)
{
MessageBox.Show("Due Date wasn't set. Defaulting to current date.", "Alert",
MessageBoxButton.OK, MessageBoxImage.Warning);
DueDate = DateTime.Parse(DateTime.Now.ToShortDateString());
}
注意:Exception e
仅用于快速完成它,真正的异常是已知的。给出的错误是“可为空的对象必须具有值”。 System.InvalidOperationException
问题
最好是照我的方式处理这个问题,否则If-Else会更好吗?如果是这样,我将如何实施它?
答案 0 :(得分:3)
由于您已经在使用TryParse
,因此无需使用try ...catch
块。不仅效率低下,而且也不干净。只需取DateTime.TryParse
的返回值并做出决定即可。
var isDate = DateTime.TryParse(dteCommission.SelectedDate.Value.Date.ToShortDateString(),
然后if (isDate){...} else {...}
答案 1 :(得分:2)
异常e仅用于快速完成它,真正的异常是已知的。给出的错误是“可为空的对象必须具有值”。 System.InvalidOperationException
您怎么知道在运行时会有不同的例外?可以说NullReferenceException(例如)。请记住,所有异常都实现Exception对象。
最好是照我的方式处理这个问题,否则If-Else会更好吗?
您需要更好地处理错误。您知道它可能为Nullable,因此您需要在继续操作之前检查它是否有价值。您应该注意警告并优雅地处理它们。
如果是的话,我将如何实施它?
try
{
if(dteCommission.SelectedDate.HasValue)
{
DateTime.TryParse(dteCommission.SelectedDate.Value.Date.ToShortDateString(),
out DueDate);
} else{
MessageBox.Show("Due Date wasn't set. Defaulting to current date.", "Alert",
MessageBoxButton.OK, MessageBoxImage.Warning);
DueDate = DateTime.Parse(DateTime.Now.ToShortDateString());
}
}
catch(Exception e)
{
Log.LogError(e);
MessageBox.Show("Unhandle error occurred please call Admin", "Alert",
MessageBoxButton.OK, MessageBoxImage.Warning);
}
答案 2 :(得分:1)
如果您承诺使用tryparse
,那么使用If-Else
是更好的方法,这取决于tryparse
方法的输出。但是如果您使用Parse
,则很可能会遇到以下例外之一:
因此最好进行异常处理。
第一种方法:
var isParsable = DateTime.TryParse(dteCommission.SelectedDate.Value.Date.ToShortDateString(),
out DueDate);
if (isParsable)
{
//Continue With your Procedure
}
else
{
MessageBox.Show("Due Date wasn't set. Defaulting to current date.", "Alert",
MessageBoxButton.OK, MessageBoxImage.Warning);
}
对于第二种情况,您可以选择:
DateTime DueDate;
try
{
var DueDate = DateTime.TryParse(dteCommission.SelectedDate.Value.ToString());
}
catch (Exception E)
{
MessageBox.Show("Due Date wasn't set. Defaulting to current date.", "Alert",
MessageBoxButton.OK, MessageBoxImage.Warning);
//also you can you the exception type to make it clear for use if it is
// an exception of Null, Format or Argument
}
答案 3 :(得分:0)
我想建议在这种情况下使用if else语句,而不是在例外情况下使用它,它也会被优化,并为您提供有意义的信息,以特定于该情况。
异常处理应仅用于处理未知方案。