使用Catch从C#退出类

ImG*_*reg 1 c# try-catch winforms

我正在寻找在我所拥有的ac#winforms类中处理错误的最佳方法.该应用程序的要点是它有一个数据分析器,可以分析统计数据和其他类似的东西.但是,我正在寻找处理ABORT的正确方法.

例如,我有一个名为Analyzer的类

namespace PHOEBE
{
    public class Analyzer
    {
        public Analyzer(){
            DoAnalysis();
            DoFurtherAnalysis();
        }

    public class DoAnalysis(){
        try{
            Convert.ToInt32("someNumber...."); //obviously fails..
        }
        catch{
          //ERROR OCCURRED, ABORT ALL ANALYSIS
            return;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,当调用DoAnalysis()时,会发生错误.catch块将捕获异常.但是,当发生此捕获时,它将返回到构造函数并运行DoFurtherAnalysis().这是个问题.

我知道你可以从每个方法返回值,其中每个值表示某个结果(即1 =成功,0 =失败).但是,我调用的很多方法都使用了返回值.我还可以使用一个在发生错误时被标记的布尔值,并在从构造函数调用下一个方法之前检查该值,但每次检查此值都很烦人且重复.

我真的希望某种类似"我可以使用的中止机制".还有其他解决方法吗?对此有任何有趣的解决方法吗?

假设从表单调用此类.

Jon*_*eet 11

只是让异常传播起来 - 如果你能真正处理它,你应该只捕获异常.例外 .NET 的"中止机制".你现在正在吞下一切都出错的信号,然后回归好像一切都好.

一般来说,我发现捕获异常非常罕见 - 通常它位于顶层(因为一个请求阻止整个服务器停止)或者为了保持适当的抽象而将一种异常转换为另一种异常.

  • @Tigran:只是因为OP使用的是.NET.我说"例外是.NET表示错误的方式;你使用的是.NET,因此异常是你应该预期错误传播的方式." 我并没有试图暗示这是*独家*.NET机制. (2认同)

vid*_*ige 6

我真的希望某种类似"我可以使用的中止机制".还有其他解决方法吗?对此有任何有趣的解决方法吗?

就在这里.它被称为异常处理.

让我们重写你的代码:

namespace PHOEBE
{
    public class Analyzer
    {
        public Analyzer()
        {
            try
            {
                DoAnalysis();
                DoFurtherAnalysis();
            }
            catch
            {
                //ERROR OCCURRED, ABORT ALL ANALYSIS
                return;
            }
        }

    public class DoAnalysis()
    {
        Convert.ToInt32("someNumber...."); //obviously fails..
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,构造函数将中止而不是运行第二个方法,因为异常将"冒泡"并被捕获到您想要的位置.

在一个不相关的注释:请尝试捕获尽可能具体的例外,在这种情况下a FormatException