我有
public void ParentFunction()
{
try
{
foreach (var item in someArray)
{
procedure1();
procedure2();
procedure3();
}
}
catch(Exception exc)
{
console.Writeline(exc.Message);
}
}
在每个程序中,我都尝试捕获异常处理。 如何在ParentFunction中捕获任何过程的异常?基本上,当抛出任何过程中的任何异常时,我需要将foreach项跳到下一个
答案 0 :(得分:2)
例如,使用您的父类
public void ParentFunction()
{
try
{
foreach (var item in someArray)
{
try
{
procedure1();
procedure2();
procedure3();
}
catch(Exception exc)
{
continue;
}
}
}
catch(Exception exc)
{
console.Writeline(exc.Message);
}
}
在程序中显式抛出异常,因此例如在procedure1中显式抛出特定异常。
throw new FaultException // Sample exception only
循环中的try-catch将捕获此异常并忽略它并继续下一次迭代。
但是,我不知道为什么你没有正确处理异常,只是忽略它们。
答案 1 :(得分:1)
我认为这可以帮到你:
public void ParentFunction()
{
try
{
foreach (var item in someArray)
{
//If an error occurred in flowing Try-Catch Skip
// and foreach go to next item
try
{
procedure1();
procedure2();
procedure3();
}
catch(Exception exc)
{
//Here you can Handle your procedures error
console.Writeline(exc.Message);
}
}
}
catch(Exception exc)
{
console.Writeline(exc.Message);
}
}
答案 2 :(得分:1)
您可以尝试这样的事情
public void ParentFunction()
{
foreach (var item in someArray)
{
if(!TryExecute(procedure1())
continue;
if(!TryExecute(procedure2())
continue;
TryExecute(procedure3());
}
}
public bool TryExecute(Action action)
{
try
{
action.Invoke();
return true;
}
catch(Exception exc)
{
console.Writeline(exc.Message);
return false;
}
}
答案 3 :(得分:1)
首先,如果您需要有关ParentFunction()中抛出异常的信息,您只需要从子过程中抛出异常,ParentFunction()将捕获它。
在你的问题中,我假设你所需要的只是让你的程序成为一个布尔函数,如果返回true则转到下一个子函数,否则使用continue; 。 (如果child_function内部出现问题而不是抛出异常,则返回false。
public void ParentFunction()
{
try
{
foreach (var item in someArray)
{
if( ! child_function1())
continue;
if( ! child_function1())
continue;
child_function3();
}
}
catch(Exception exc)
{
console.Writeline(exc.Message);
}
}
答案 4 :(得分:0)
您可以使用其他方法初始化对象的一部分:
class Baseclass
{
public virtual void callingbasefuntion()
{
throw new caughtexecption();
}
}
class Derivedclass : Baseclass
{
public override void Initialize()
{
try
{
base.callingbasefuntion();
}
catch (caughtexecption)
{
...
}
}
}
var object = new Derivedclass ();
object.callingbasefuntion();