基本的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;
}
以下任何一项都有意义:
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。
在这两种情况下,按原样,只有两种情况中的第一种会执行。return
和throw
都会导致执行离开函数,因此在技术上都不正确。
在第一种情况下,它将返回,并且永远不会调用投掷。在第二种情况下,情况正好相反(对于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。