我想知道是否有人可以告诉我这个样本是否正确。 请忽略我为了演示目的而编写的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;
}
答案 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)
在这两种情况下,只有两个中的第一个才会执行。 return
和throw
都导致执行离开函数,因此技术上都不正确。
在第一种情况下,它将返回,并且永远不会调用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。