基本的C#问题if-else

本文关键字:问题 if-else | 更新日期: 2023-09-27 17:50:03

我想知道是否有人能告诉我这个样本是否正确。请忽略我写的if语句,它只是为了演示。

基本上,我想知道的是,如果我需要在我的else中抛出异常,那么让它返回false然后抛出异常是正确的吗,如下所示:

public bool test(Int j)
{
    if(!TestOnJThatcanThrowOutOfMemoryException E)
    {
        return true;
    }
    else
    {
        return false;
        throw new OutOfMemoryException();
    }
}

或者-我应该抛出异常,然后返回false outside else语句,如下所示:

public bool test(Int j)
{
    if(!TestOnJThatcanThrowOutOfMemoryException E)
    {
        return true;
    }
    else
    {
        throw new OutOfMemoryException();
    }
    return false;
}

基本的C#问题if-else

以下任何一项都有意义:

a( 返回测试结果,不要抛出:

    public bool test(Int j)
    {
        if(!TestOnJThatcanThrowOutOfMemoryException(j))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

(注意,这个例子过于冗长,可以重写为:(

    public bool test(Int j)
    {
        return !TestOnJThatcanThrowOutOfMemoryException(j)
    }

b( 如果测试失败,则抛出,否则不执行任何操作:

    public void test(Int j)
    {
        if(TestOnJThatcanThrowOutOfMemoryException(j))
        {
            throw new OutOfMemoryException();
        }
    }

换句话说,决定该方法应该做什么——执行测试并将结果作为布尔值返回,或者执行测试并在失败时抛出。

当发生异常时,它不会执行方法中的其余代码。当使用return语句时,它会中断当前方法的执行。

所以你只需要打两个中的一个

public bool test(Int j)        
{            
     if(!TestOnJThatcanThrowOutOfMemoryException E)            
     {    
          return true;            
     }            
     else            
     {                
         throw new OutOfMemoryException();            
     }        
}

如果返回false然后抛出异常,则不会抛出异常。该方法在return语句处退出。

如果抛出一个异常,然后返回false,那么该异常将被抛出并捕获在适当的catch块中,并且最终返回false将不会执行。

所以,如果你想在这里抛出一个异常,那么就抛出这个异常。如果您想在此处返回false,请返回false。

在这两种情况下,按原样,只有两种情况中的第一种会执行。returnthrow都会导致执行离开函数,因此在技术上都不正确。

在第一种情况下,它将返回,并且永远不会调用投掷。在第二种情况下,情况正好相反(对于else块(。

如果你想要一个异常,就抛出它。不要麻烦在任何地方放一个返回false。

第一个例子永远不会抛出异常,因为返回false结束了逻辑流。

第二个例子"return false;"永远不会被当作return true;语句,否则将引发异常。

在这两个例子中,您都做错了什么。你想获得什么?

在第一个例子中,throw语句将永远不会被执行,而在第二个例子中return false语句将不会被执行。

如果抛出,返回语句将不会执行。你只需要:

public bool test(Int j)        
{            
   if(!TestOnJThatcanThrowOutOfMemoryException E)            
   {                
      return true;            
   }            
   throw new OutOfMemoryException();            
}

您的第二个选项(只是在else中抛出异常(会更正确。不过,请注意,没有到达return false;语句的代码路径——要么if为真,在这种情况下返回true,要么不为真,这种情况下抛出异常(从而将代码中止到下一个更高级别的处理程序(。所以你其实并不需要它。

您的尝试似乎是在测试参数"int j"的值。检查应与尝试捕获((相适应

try
{
   // take a object as argument and try parse it to an int here 
   // or a TryParse will return a true/false if bool can return without exception.
   int something = int.Parse(j);
}
catch (TestOnJThatcanThrowOutOfMemoryException e)
{
   return true;
}
catch (OutOfMemoryException e)
{
    // this will be hit if it isn't a TestOnJ.. exception
    return false;
}
catch 
{
    // and here if not any of above
    return false;
}

不过,我不确定我是否会创建一个方法,目的只是强制执行特定类型的异常。很抱歉,如果完全理解错误,

选择第二个选项,但删除最后的"return false"语句。您的方法返回一个布尔值,因此在发生OutOfMemoryException(本例中的第二个if语句(的情况下,您的方法将没有机会传递返回值false。但是,如果在调用方法的代码中适当地处理返回值,那么这就不会成为问题。布尔值被隐式初始化为false,因此在调用函数中,请在执行剩余代码之前检查此方法是否返回true。