【问题标题】:How to Exit a Method without Exiting the Program?如何在不退出程序的情况下退出方法?
【发布时间】:2011-03-19 20:42:43
【问题描述】:

我对 C# 还是很陌生,与 C/CPP 相比,我很难适应它。

如何在 C# 上退出一个函数而不像这个函数那样退出程序?

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
System.Environment.Exit(0);

这将不允许返回类型,如果不这样做,它将继续通过函数不间断地运行。这是不可取的。

【问题讨论】:

  • 顺便说一句,它们现在被称为“方法”,而不是“函数”。
  • 嗯??? C/C++ 确实有 return; 用于 void 函数...
  • @John 我用 C# 和其他 OOP 语言编程已经很长时间了,我仍然称它们为函数。 (而我只有 19 岁!)
  • @John,对我来说,一种方法意味着对实例进行操作。函数对其参数进行操作,无论它是否是静态的。方法是对实例进行操作的函数的子案例,其中实例是第一个参数(隐式或显式,具体取决于您的语言)。
  • @Nathan:我更喜欢“实例方法”和“静态方法”或“类方法”。函数是一个非面向对象的概念,并不是指类的概念。

标签: c# methods return exit


【解决方案1】:

这里的基本问题是您将System.Environment.Exit 误认为return

【讨论】:

    【解决方案2】:

    我会用return null;表示没有数据要返回

    【讨论】:

      【解决方案3】:

      @John、Earlz 和 Nathan。我在 uni 学到的方法是:函数返回值,方法不返回。在某些语言中,语法是/实际上是不同的。示例(无特定语言):

      Method SetY(int y) ...
      Function CalculateY(int x) As Integer ...
      

      现在大多数语言对两个版本都使用相同的语法,使用 void 作为返回类型来表示实际上没有返回类型。我认为这是因为语法更一致,更容易从方法更改为函数,反之亦然。

      【讨论】:

        【解决方案4】:

        有两种方法可以提前退出方法(不退出程序):

        • 使用return 关键字。
        • 抛出异常。

        异常应该只用于异常情况——当方法不能继续并且它不能返回一个对调用者有意义的合理值时。通常你应该在完成后返回。

        如果您的方法返回 void,那么您可以编写不带值的 return:

        return;
        

        具体关于您的代码:

        • 没有必要写三遍相同的测试。所有这些条件都是等价的。
        • 在编写 if 语句时还应该使用花括号,以便清楚哪些语句在 if 语句的主体内:

          if (textBox1.Text == String.Empty)
          {
              textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
          }
          return; // Are you sure you want the return to be here??
          
        • 如果您使用的是 .NET 4,有一个有用的方法,根据您的要求,您可以考虑在此处使用:String.IsNullOrWhitespace

        • might 想使用Environment.Newline 而不是"\r\n"
        • 除了将消息写入文本框之外,您可能需要考虑另一种显示无效输入的方法。

        【讨论】:

        • 就是这么简单!只返回没有值!非常感谢!我带着 0 回来了。=)
        • 我正在向状态框输入消息以进行视觉提示。不过建议很好!我学到了很多东西。
        • string.IsNullOrEmpty(.Net 4 之前的喊叫声——当然不会检测到只有空格的字符串)。可悲的是,并不是我们所有人都可以使用 4.0。
        • "return" 如果您处于嵌套代码段中,例如“catch”,则不起作用。
        【解决方案5】:

        除了 Mark 的回答,您还需要注意范围,它(如在 C/C++ 中)使用大括号指定。所以:

        if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
            textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
        return;
        

        将始终在该点返回。然而:

        if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
        {
            textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
            return;
        }
        

        只有在进入if 语句时才会返回。

        【讨论】:

          【解决方案6】:

          如果函数为空,结束函数将return。否则,您需要做一个明确的return someValue。正如马克所提到的,你也可以throw 一个例外。你的问题的背景是什么?您是否有更大的代码示例来向您展示一些退出函数的方法?

          【讨论】:

          • 在这种情况下抛出异常并不是最佳实践
          猜你喜欢
          • 1970-01-01
          • 2021-10-27
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 1970-01-01
          • 1970-01-01
          • 2020-10-28
          • 2018-02-23
          相关资源
          最近更新 更多