我无法理解如何在返回值的方法中处理异常,在我的例子中是Person []类型的值。我试着按照这里所写的那样做 - Creating and Throwing Exceptions,但我仍然得到例外 - 扔冰淇淋;线。有人可以给我一个提示吗? 我也尝试在catch块中返回null,而不是throw,但我只得到另一个例外。(我故意使用ArrayList而不是List)
static ArrayList CreateNonGenericList()
{
ArrayList personList = new ArrayList()
{
new Person {FirstName="John", LastName="Clark", Age=39,
StartDate= new DateTime(1989, 12, 30)},
new Person{FirstName="Zefa", LastName="Thoms", Age=23,
StartDate= new DateTime(2003, 4, 12)},
new Person{FirstName="Robin", LastName="Hood", Age=33,
StartDate= new DateTime(2001, 4, 12)}
};
personList.Add("John"); //Passing a String value instead of Person
return personList;
}
static Person[] SortNonGenericList(ArrayList personList)
{
try
{
Person[] latestpersonList = (from Person p in personList
where p.StartDate > new DateTime(2000, 1, 1)
select p).ToArray();
return latestpersonList;
}
catch (InvalidCastException ex)
{
InvalidCastException icex = new InvalidCastException(ex.Message, ex);
throw icex; //Getting an InvalidCastException here
}
}
答案 0 :(得分:2)
如果您只想让方法的调用者处理异常,您可以完全删除try/catch
块。例外情况将会出现'#34;冒泡"当他们没有被抓住时自动。
如果您想在catch
块中执行某些操作(例如日志记录),则应抛出原始异常:
catch (InvalidCastException ex)
{
// Log(ex);
throw;
}
这样,异常中的堆栈跟踪不会被重置"就像你现在的代码一样。
正如其他人所指出的那样,您当前正在做的事情是无用的,因为您正在抛出具有相同类型和消息的新异常。例如,如果您想要更具描述性的异常,则创建新异常非常有用:
catch (InvalidCastException ex)
{
throw new ApplicationException("Unable to Sort list because at least one person has no StartDate", ex);
}
然后,例外仍然会发生"在catch块中,但它的描述将为代码中的该位置提供有用的信息。
当然最终你必须实际处理异常。如果你不能对personList进行排序,你想做什么?按原来的顺序归还?退出申请?告诉最终用户操作失败了吗?