如何处理并在辅助方法返回值时通知用户

本文关键字:方法 返回值 用户 通知 何处理 处理 | 更新日期: 2023-09-27 18:35:25

我不知道

在这种情况下如何向用户通知异常:

private void myMethod01()
{
    try
    {
        int myResult = myMethod02();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private int myMethod02()
{
    try
    {
        //my code
    }
    catch
    {
        throw;
    }
}

我在这个解决方案中看到的问题之一是 myMethod01 在 catch 中向用户显示一条消息。问题是myMethod01也许可以通过另一个方法调用,所以如果我在myMethod01中显示一条消息,也许调用这个myMethod01的另一个方法会向用户显示另一条消息,所以最后,用户会收到两条消息。我的意思是,我不确保 myMethod01 是调用中的最后一个方法。

此外,如果我在 myMethod02 上显示一条消息,我必须抛出异常或返回一个值,因为该方法必须返回一个值。另一个问题是,这可能是一个解决方案,如果是一个主要应用程序,但如果是一个来自库的方法,那么我无法在此方法中显示消息。

我想知道哪种是处理异常和重新抛出的好方法。

我想通过一条消息通知用户异常的来源,所以我想向他展示异常是否发生在 myMethod02、myMethod01 或其他调用 myMethod01 的方法上。

非常感谢。

如何处理并在辅助方法返回值时通知用户

The problem is that myMethod01 perhaps can be called by another method, so if I show a message in myMethod01, perhaps the other method that call this myMethod01 shows another message to the user, so at the end, the user receive two messages.

不应显示来自业务层方法的任何消息。当涉及到 UI 层时,假设您有一个按钮单击事件处理程序,并且您在其中调用您的方法 myMethod01() 并且调用 myMethod02(),您不应该使用 myMethod01() 和 myMethod02() 显示任何消息,而不是将异常冒泡到 caller(按钮单击事件处理程序)。因此,如果在myMethod01()中发生任何异常,它将被myMethod02()捕获,并将其重新抛出到按钮单击处理程序,并且您应该在单击事件处理程序中捕获异常并向用户显示有意义的消息,异常StackTrace还将包含有关异常(myMethod01())的来源及其通过的所有方法的详细信息。

上述解决方案是一种方法,可能您不需要冒泡异常,而只需要通知其他方法该方法是否成功执行。 例如,假设您有一个方法SaveAddress(),并且此方法由方法SaveStudentDetails()调用。如果你不想从 SaveAddress() 中冒出异常,但你只需要通知 SaveAddress() 是否成功,你不会从 SaveAddress() 的 catch 块中抛出异常,你可以从此方法返回一个布尔值,无论 SaveAddress() 是否成功。

another problem that this could be a solution if is the main application, but if is a method from a library, then I can't show a message in this method.

显示来自类库的任何用户通知从来都不是一个好主意。因为当从类库中的方法引发异常时,使用此类库的应用程序可能希望采取不同的操作。某些应用程序可能希望显示不同的消息或不显示任何内容。因此,调用方有责任决定如何处理异常。


异常日志记录

除了处理异常之外,您还应该有适当的日志记录。当涉及到生产环境时,有时不可能找出在没有适当日志的情况下出现故障时出了什么问题。