基本C#问题if - else

时间:2011-04-12 19:20:46

标签: c#

我想知道是否有人可以告诉我这个样本是否正确。 请忽略我为了演示目的而编写的if语句。

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

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

OR - 我应该抛出异常然后在其他语句之外返回false:

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

10 个答案:

答案 0 :(得分:3)

以下任何一个都有意义:

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();
        }
    }

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

答案 1 :(得分:2)

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

所以你只需要调用其中一个

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

答案 2 :(得分:1)

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

如果抛出异常然后返回false,那么异常将被抛出并被捕获到相应的catch块中,并且最终返回false将不会执行。

因此,如果您想在此处抛出异常,则抛出异常。如果你想在这里返回false,则返回false。

答案 3 :(得分:0)

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

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

如果你想要一个例外,抛出它。不要在任何地方放错返回。

答案 4 :(得分:0)

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

第二个例子是“返回假”;将永远不会被击中为返回true;将执行语句或抛出异常。

答案 5 :(得分:0)

在你的两个例子中,你做错了什么。你想要得到什么?

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

答案 6 :(得分:0)

如果抛出,则不会执行return语句。您所需要的只是:

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

答案 7 :(得分:0)

你的第二个选择(只是在其他地方抛出异常)会更正确。但请注意,没有代码路径可以到达return false;语句 - if为真,在这种情况下返回true,或者不返回{{1}},在这种情况下,抛出异常(从而将代码中止到下一个更高级别的处理程序)。所以你真的不需要它。

答案 8 :(得分:0)

您的尝试似乎正在测试参数“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;
}

虽然,我不确定我是否会创建一个方法,其目的仅仅是强制某种特殊的异常。对不起,如果完全误解你,

答案 9 :(得分:0)

转到第二个选项,但最后删除“return false”语句。您的方法返回一个布尔值,因此如果出现OutOfMemoryException(在您的情况下为第二个if语句),您的方法将无法传递返回值false。但是,如果您在调用方法的代码中正确处理返回值,那么这不会成为问题。 boolean被隐式初始化为false,因此在您的调用函数中检查此方法在执行剩余代码之前是否返回true。