【问题标题】:Exiting a method in C#退出 C# 中的方法
【发布时间】:2009-03-31 00:38:52
【问题描述】:

在 C++ 中,如果我想退出一个方法而不返回我能做的任何事情;

// A completely useless method
static public double function(int a){
  if(a==1){
     cout << "Error !";
     exit(1);
  }
  else
     return (double)a;       
}

如何在 C# 中进行等效操作?

【问题讨论】:

  • 不要使用 exit() 函数。它应该被称为“crash()”,因为它实际上就是这样做的。你真的想在函数中间崩溃你的程序吗?

标签: c# methods


【解决方案1】:

在 .NET 中处理错误情况的常用方法是抛出异常:

public static double function(int a) {
   if (a == 1) {
      throw new ArgumentException("The value 1 is not accepted.");
   }
   return (double)a;       
}

异常会被调用该方法的代码或其他地方捕获。由调用代码在适当的级别进行处理。

以这种方式清理输入的方法是很常见的,这样任何错误的值都会被尽早发现,而不是在代码中导致更难追踪的错误。

【讨论】:

  • 我会争辩说,您不应该捕获 ArgumentException。这对调用者来说是一个严格的例外。
  • 你应该处理任何你可以智能处理和恢复的异常(并且只有那些异常)。
【解决方案2】:

“退出”函数不只是退出方法 - 它终止程序。

http://msdn.microsoft.com/en-us/library/k9dcesdd.aspx

在 C# 控制台应用程序中,您可以调用 System.Environment.Exit()。

但我建议任何这样做的代码都可以用更好的结构编写。例如,您的方法可能会抛出异常,并让调用者决定如何处理它。

【讨论】:

    【解决方案3】:

    您可以使用 return 语句退出方法而不返回任何内容。但如果返回类型是 void 以外的任何内容,则必须返回一些内容。

    如果你想因为错误而退出一个方法,你应该查看异常。

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      这肯定是一件奇怪的事情,但是是的 - 你可以调用 Environment.Exit。不过,我强烈建议抛出异常。这使您有机会进行清理,您的调用者可以决定如何处理错误。如果没有人这样做,您仍然会降低流程 - 但会更优雅一些。

      【讨论】:

        【解决方案6】:

        考虑到你想做的事情的上下文,这应该是等价的:

        public static double SomeFunction(int a)
        {
            if(a==1)
            {
                throw new Exception("Error!");
            }
            else
            {
                return (double)a;
            }
        }
        

        【讨论】:

        • 一般来说是的,但请注意 Shinka,您可能希望更准确地了解 Exception 类型。即 NotSupportedException、ArgumentException、ArgumentOutOfRangeException。
        【解决方案7】:

        尝试 return 退出方法而不退出整个程序。

        【讨论】:

        • 这只适用于 void 方法。其他类型呢?你需要返回一些值。
        【解决方案8】:

        考虑到所有先前答案的另一个选项,如果您正在使用 Windows 窗体,则调用

        Application.Exit();
        

        【讨论】:

          【解决方案9】:

          你没有。按照您的方法,您必须在每次调用您的函数后进行测试,以检查是否确实返回了双精度数。

          在您的示例中,您会执行类似...

          public static double myFunc( int a ) {
          
             if( a==1 ){
                 throw new InvalidArgumentException( "a must be greater than one." );
             }
          
             return (double)a;
          
          }
          

          【讨论】:

            猜你喜欢
            • 2010-10-29
            • 1970-01-01
            • 2016-11-12
            • 1970-01-01
            • 2016-11-19
            • 2020-04-28
            • 1970-01-01
            • 1970-01-01
            • 2013-04-21
            相关资源
            最近更新 更多