草庐IT

wn-block

全部标签

c# - 在 catch block 中返回?

在catchblock中有一个return语句是错误的吗?有哪些替代方案?即:publicboolSomeFunction(){try{//somecodereturntrue;}catch(Exceptionex){MessageBox.Show(ex.message);returnfalse;}} 最佳答案 您可以从catchblock正常返回。它通常是很好的功能代码。 关于c#-在catchblock中返回?,我们在StackOverflow上找到一个类似的问题:

c# - 使用 'try-finally' block 而不使用 'catch' block

在某些情况下是否适合使用try-finallyblock而不使用catchblock? 最佳答案 您可以使用它来确保某些操作发生在try内容之后或发生异常时,但您不希望使用该异常。需要说明的是,这并没有隐藏异常。finallyblock在异常传播到调用堆栈之前运行。当你使用using关键字时,你也会无意中使用它,因为这会编译成一个try-finally(不是一个精确的转换,但为了论证它是足够接近)。try{TrySomeCodeThatMightException();}finally{CleanupEvenOnFailure();

c# - 使用 'try-finally' block 而不使用 'catch' block

在某些情况下是否适合使用try-finallyblock而不使用catchblock? 最佳答案 您可以使用它来确保某些操作发生在try内容之后或发生异常时,但您不希望使用该异常。需要说明的是,这并没有隐藏异常。finallyblock在异常传播到调用堆栈之前运行。当你使用using关键字时,你也会无意中使用它,因为这会编译成一个try-finally(不是一个精确的转换,但为了论证它是足够接近)。try{TrySomeCodeThatMightException();}finally{CleanupEvenOnFailure();

c# - 是否存在不会为 'using' block 调用 Dispose 的情况?

这是我遇到的一个电话面试问题:是否有时不会在范围由usingblock声明的对象上调用Dispose?我的回答是否定的-即使在usingblock期间发生异常,Dispose仍将被调用。面试官不同意,说如果using被包裹在try-catchblock中,那么在你进入的时候Dispose不会被调用捕获block。这与我对结构的理解背道而驰,而且我一直没能找到任何可以支持面试官观点的东西。他是对的还是我误解了这个问题? 最佳答案 导致在usingblock中不调用Dispose的四种情况:在usingblock内时机器出现电源故障。您

c# - 是否存在不会为 'using' block 调用 Dispose 的情况?

这是我遇到的一个电话面试问题:是否有时不会在范围由usingblock声明的对象上调用Dispose?我的回答是否定的-即使在usingblock期间发生异常,Dispose仍将被调用。面试官不同意,说如果using被包裹在try-catchblock中,那么在你进入的时候Dispose不会被调用捕获block。这与我对结构的理解背道而驰,而且我一直没能找到任何可以支持面试官观点的东西。他是对的还是我误解了这个问题? 最佳答案 导致在usingblock中不调用Dispose的四种情况:在usingblock内时机器出现电源故障。您

c# - 为什么 yield return 不能出现在带有 catch 的 try block 中?

以下是可以的:try{Console.WriteLine("Before");yieldreturn1;Console.WriteLine("After");}finally{Console.WriteLine("Done");}finallyblock在整个事情完成执行时运行(IEnumerator支持IDisposable以提供一种方法来确保这一点,即使枚举在完成之前被放弃)。但这不行:try{Console.WriteLine("Before");yieldreturn1;//errorCS1626:Cannotyieldavalueinthebodyofatryblockwit

c# - 为什么 yield return 不能出现在带有 catch 的 try block 中?

以下是可以的:try{Console.WriteLine("Before");yieldreturn1;Console.WriteLine("After");}finally{Console.WriteLine("Done");}finallyblock在整个事情完成执行时运行(IEnumerator支持IDisposable以提供一种方法来确保这一点,即使枚举在完成之前被放弃)。但这不行:try{Console.WriteLine("Before");yieldreturn1;//errorCS1626:Cannotyieldavalueinthebodyofatryblockwit

c# - 为什么 'continue' 语句不能在 'finally' block 内?

我没有问题;我只是好奇。想象一下以下场景:foreach(varfooinlist){try{//Somecode}catch(Exception){//Somemorecode}finally{continue;}}这不会编译,因为它会引发compilererrorCS0157:Controlcannotleavethebodyofafinallyclause为什么? 最佳答案 finallyblock无论是否抛出异常都会运行。如果抛出异常,continue到底会做什么?您不能继续执行循环,因为未捕获的异常会将控制转移到另一个函数

c# - 为什么 'continue' 语句不能在 'finally' block 内?

我没有问题;我只是好奇。想象一下以下场景:foreach(varfooinlist){try{//Somecode}catch(Exception){//Somemorecode}finally{continue;}}这不会编译,因为它会引发compilererrorCS0157:Controlcannotleavethebodyofafinallyclause为什么? 最佳答案 finallyblock无论是否抛出异常都会运行。如果抛出异常,continue到底会做什么?您不能继续执行循环,因为未捕获的异常会将控制转移到另一个函数

c# - 避免嵌套 try catch block 的模式?

考虑这样一种情况,我有三种(或更多)执行计算的方法,每种方法都可能因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在执行以下操作:doubleval;try{val=calc1();}catch(Calc1Exceptione1){try{val=calc2();}catch(Calc2Exceptione2){try{val=calc3();}catch(Calc3Exceptione3){thrownewNoCalcsWorkedException();}}}是否有任何公认的模式可以更好地实现这一点?当然,我可以将每个计算都包装在一个失败时返回null的辅助方法中,然后只使