C# 显示从Windows窗体引发的正确错误消息

C# 显示从Windows窗体引发的正确错误消息,c#,winforms,error-handling,C#,Winforms,Error Handling,我正在开发一个Windows窗体应用程序。构造函数中发生了很多事情,我有几个try-catch块。但是,作为最终结果,我想在所显示的表单上显示错误消息。我不确定这样做的正确方法是什么。我想让一个字符串变量在所有表单中都可见,然后在每个尝试catch块中设置不同的消息,该消息将通过调用在表单中显示该字符串变量的值来显示 但这似乎不是很好的方法。我更喜欢用某种方式重新抛出异常或类似的东西,并在所示的表单事件中处理它。我认为这更接近正确的错误处理方法。您违反了两个重要原则: 在构造函数中做最少的工作。

我正在开发一个
Windows窗体
应用程序。构造函数中发生了很多事情,我有几个
try-catch
块。但是,作为最终结果,我想在所显示的
表单上显示错误消息。我不确定这样做的正确方法是什么。我想让一个字符串变量在所有表单中都可见,然后在每个
尝试catch
块中设置不同的消息,该消息将通过调用在
表单中显示该字符串变量的值来显示


但这似乎不是很好的方法。我更喜欢用某种方式重新抛出异常或类似的东西,并在所示的
表单
事件中处理它。我认为这更接近正确的错误处理方法。

您违反了两个重要原则:

在构造函数中做最少的工作。构造函数除了捕获构造函数参数外,不应该做太多工作。任何其他处理的成本应推迟到需要时

如果合适,请从实例构造函数抛出异常。 构造函数应该像任何方法一样抛出和处理异常。具体来说,构造函数不应该捕获和隐藏它无法处理的任何异常

因此,为了回答您的问题,如果在构造函数阶段出现任何错误:立即显示它。它应该意味着对象不能被构造


我不知道在构造函数中发生了什么,但是我很确定你应该推迟到以后,比如表单加载。但仍然:在出现异常的地方显示异常。

您在try-catch块中处理的错误是合法的失败,还是与验证错误相关的错误?听起来您可能正在使用异常来处理程序流。这可能是一个下游问题?好吧,尽管我没有太多的经验,但我确实同意你的看法。然而,由于糟糕的体系结构和其他一些事情,这就是这个项目中的方式,所以我试图充分利用它。但我认为你应该能够从构造函数中重构代码?用于程序流的异常(即,它们不仅被捕获,而且被抛出)更难处理,我认为目前最好的选择是将异常本身收集到一个列表中,并在表单加载时显示它们的消息(也来自任何内部异常)。但是您应该尝试用
if-then-else
逻辑替换它们。目前,逻辑将保留在构造函数中(管理者决定)。除此之外,我将收集您提供的例外情况。