我试图让我的页面调用一个方法,如果失败,则在我的mbResult控件中显示错误。但是,由于我的方法是一个void方法,我很难抛出异常。如果我从方法结束中抛出它,它将不会显示在我的错误框中。
我的页面中有以下代码:
try
{
Facade.AcceptChanges();
}
catch(FarAlreadyExistsException)
{
mbResult.Message = new MessageInfo(FutureActivitiesAlreadyExistsMessage);
return;
}
接受更改方法是这个
public void AcceptChanges()
{
try
{
DataContext.SaveChanges();
}
catch (Exception)
{
return;
}
}
答案 0 :(得分:3)
删除第二个try-catch,让异常在第一个catch块中被捕获:
public void AcceptChanges()
{
DataContext.SaveChanges();
}
编辑:您似乎还应用以下更改:
try
{
Facade.AcceptChanges();
}
catch(Exception) // according to the documentation, this should be an OptimisticConcurrencyException
{
mbResult.Message = new MessageInfo(FutureActivitiesAlreadyExistsMessage);
return;
}
答案 1 :(得分:3)
public void AcceptChanges() {
try
{
DataContext.SaveChanges();
}
catch (Exception cause) {
throw new FarAlreadyExistsException(cause);
}
}
你没有抛出异常,所以你不会在第一种方法的try-catch中捕获它
答案 2 :(得分:2)
如果您不打算执行任何操作,则不应在AcceptChanges
中处理异常。它只是吞下了错误,因此您的外部try...catch
块将无法看到它(并且catch
块中的代码不会被触发。
删除try...catch
方法中的AcceptChanges
,然后调用它的方法中的catch代码将捕获异常(只要它的类型正确。
答案 3 :(得分:1)
try-catch
方法中没有通用AcceptChanges()
语句。让Exception
中出现的DataContext.SaveChanges()
在代码的第一部分内冒泡到您的try-catch
。
您应该只处理您期望的异常(除非您真的不关心一段代码是否失败)。而且你应该只处理关心异常的确切位置的异常。
答案 4 :(得分:1)
您正在AcceptChanges
吞下例外。移除Try;Catch;
中的AcceptChanges
并让它冒泡。
答案 5 :(得分:1)
你不应该在AcceptChanges()
中捕获异常然后让try-catch块处理它。