Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果不在C#中返回值,我如何显示该方法成功或失败?_C#_Exception Handling_Syntactic Sugar - Fatal编程技术网

如果不在C#中返回值,我如何显示该方法成功或失败?

如果不在C#中返回值,我如何显示该方法成功或失败?,c#,exception-handling,syntactic-sugar,C#,Exception Handling,Syntactic Sugar,我知道在C/C++等其他语言中,您会返回SUCCESS这样的值,这将向调用方法指示该方法返回成功或失败 在C#中是否有一种“好”的方法可以做到这一点,而不需要一个成功的返回变量?我想到了抛出异常,但我不确定如何实现它。是否存在自定义异常,您可以将其与自己的错误消息一起抛出 样本代码将不胜感激 提前谢谢。您指的是bool数据类型吗 函数定义示例: public static bool DoSomething() { if ( some || condition ) retu

我知道在C/C++等其他语言中,您会返回SUCCESS这样的值,这将向调用方法指示该方法返回成功或失败

在C#中是否有一种“好”的方法可以做到这一点,而不需要一个成功的返回变量?我想到了抛出异常,但我不确定如何实现它。是否存在自定义异常,您可以将其与自己的错误消息一起抛出

样本代码将不胜感激


提前谢谢。

您指的是
bool
数据类型吗

函数定义示例:

public static bool DoSomething()
{
    if ( some || condition )
        return true;
    else
        return false;
}
用法示例:

public static void main()
{
    if ( DoSomething() )
        Console.WriteLine( "SUCCESS" );
    else
        Console.WriteLine( "FAILURE" );
}

听起来好像您想指出,如果不使用返回值或异常,方法无法成功完成。那么
out bool
参数呢

public void Execute(out bool success) {
      try {
          //...
          success = true;
      } catch {
          success = false
      }
}

我不建议这样做,但是由于您询问……

如果您的方法是
void
,那么它返回时没有抛出异常的事实被认为是成功的

如果您的方法不是void,则特定的返回值可能被解释为执行不成功,例如:

  • bool
    方法返回
    false
  • 返回
    null的任何引用类型返回方法
1)我不建议使用异常,除非失败是“异常的”。例如,它失败了,这意味着需要处理一些事情。它们比“false”类型的返回慢


2) 为什么要避免返回值?必须没有返回值吗

我会想到不抛出异常

从函数中获取消息的基本方法有四种:

  • 归还某物
  • 使用out变量
  • 抛出异常
  • 将变量设置为类的另一个成员

如果出现意外错误,我会抛出异常。如果我希望某些东西不能一直工作,我会使用返回值。

不要将异常用于流控制或指示“成功”

如果除了返回参数之外,还想有一个成功或失败的指示器,那么可以在方法签名中使用
out bool
参数

public SomeObject DoingSomethingHere(out bool success)
{


}
if (!success)
{
    // some compensating action
}

对于某些类型的故障,自定义异常无疑是一个好方法。一种简单的方法是在一个公共库中创建一个
DomainException
类(或者您想为应用程序的问题域调用的任何类,等等),它继承自
Exception
,并添加您认为对自定义域异常有用的任何特定信息。(可能是特定代码,可能是关于当前环境的信息,这些信息可能在标准
例外情况
中不可用,等等)


在此基础上,您可以创建从中继承的更具体的异常,如
DataIntegrityException
,如果某个方法接收到的输入在技术层面上有意义,但违反了自定义业务验证规则,则可以抛出该异常。

您可以从异常中派生自己的异常

您可以返回布尔值或某些数值约定

在C#中,如果要返回成功/失败,您有比指针更容易使用的输出参数,但也有产品输出


对于特殊的事情,我倾向于例外。对逻辑事物的逻辑返回。i、 e.不要使用异常来控制程序操作。如果文件操作意外失败,则引发异常。如果应用程序需要查找一个文件,并且通常预期在正常操作中有时找不到它,我不希望调用程序捕获异常,而是简单地返回布尔值并通过应用程序选择适当的逻辑路径。

您可以返回一个状态变量,例如枚举、整数或布尔值。问题是调用方必须知道不同的返回值意味着什么。有时“真”意味着成功,有时意味着出错。而且,如果调用失败,直接调用方可能不知道该怎么办,需要失败“冒泡”,因为每个方法都失败了,因为它的调用失败了

Try-throw-catch是一种go-to模式,用于处理您知道可能失败的事情,并在发生以下情况时控制执行流:

public void MightFail()
{
   //obviously your code will do something a little more meaningful
   if(new Random().Next(2) == 0) throw new Exception("I failed");
   return;
}

public void RunRiskyMethod()
{
   var failures = 0;
   var successes = 0;
   var totalRuns = 0;

   for(var i=1;i<10000;i++)
   {
       try
       {
          MightFail();
          //if the previous line throws an exception, the below lines will not execute
          successes++;
          Console.WriteLine("Success!");
       }
       catch(Exception) //I didn't name the exception because we don't need its info.
       {
          //These lines ONLY execute if an exception was thrown from within the try block
          failures++;
          Console.WriteLine("Failure!");
       }
       finally
       {
          //this code ALWAYS executes, even if an exception is thrown and not caught
          totalRuns++;
       }
   }

   Console.WriteLine(String.Format("{0} Successes, {1} Failures.", successes, failures);
}
public void可能失败()
{
//显然,您的代码将做一些更有意义的事情
如果(new Random().Next(2)==0)抛出新异常(“I失败”);
返回;
}
public void RunRiskyMethod()
{
var故障=0;
var=0;
var totalRuns=0;

对于(var i=1;我认为你可能需要再复习一下基础知识。你在谷歌上搜索过“C#Custom Exception”了吗,看看你得到了什么?作为成功的指标,例外是一个糟糕的选择,但它们是异常情况(即意外失败)的极好指标.@Mark-当然。我并没有建议我们不应该使用异常。:)