我看过这个例子:staticvoidMain(string[]args){Console.WriteLine("Start");try{SomeOperation();}catch(Exception)when(EvaluatesTo()){Console.WriteLine("Catch");}finally{Console.WriteLine("OuterFinally");}}privatestaticboolEvaluatesTo(){Console.WriteLine($"EvaluatesTo:{Flag}");returntrue;}privatestaticvoidSo
这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:WillcodeinaFinallystatementfireifIreturnavalueinaTryblock?考虑以下代码C#代码。“finally”block是否执行?publicvoidDoesThisExecute(){stringext="xlsx";stringmessage=string.Empty;try{switch(ext){case"xls":message="Greatchoice!";break;case"csv":message="Betterchoice!";break;ca
我们已经看到很多关于何时以及为什么使用try/catch和try/catch/最后。而且我知道try/finally肯定有一个用例(特别是因为它是using语句的实现方式)。我们还看到了关于theoverheadoftry/catchandexceptions的问题.但是,我链接到的问题并没有讨论JUSTtry-finally的开销。假设tryblock中发生的任何事情都没有异常,确保finally语句在离开try时执行的开销是多少block(有时通过从函数返回)?同样,我只询问关于try/finally,没有catch,没有抛出异常。谢谢!编辑:好的,我将尝试更好地展示我的用例。我应
我有一堆属性,我将对其使用读/写锁。我可以使用tryfinally或using子句来实现它们。在tryfinally中,我会在try之前获取锁,并在finally中释放。在using子句中,我将创建一个类,该类在其构造函数中获取锁,并在其Dispose方法中释放。我在很多地方都使用读/写锁,所以我一直在寻找可能比tryfinally更简洁的方法。我很想听听一些关于为什么不推荐一种方式,或者为什么一种方式可能比另一种方式更好的想法。方法一(最后尝试):staticReaderWriterLockrwlMyLock_m=newReaderWriterLock();privateDateTi
类中的析构函数和Finalize方法之间有什么区别(如果有的话)?我最近发现VisualStudio2008将析构函数视为Finalize方法的同义词,这意味着VisualStudio不允许您在一个类中同时定义这两种方法。例如下面的代码片段:classTestFinalize{~TestFinalize(){Finalize();}publicboolFinalize(){returntrue;}}在析构函数中调用Finalize时出现以下错误:Thecallisambiguousbetweenthefollowingmethodsorproperties:'TestFinalize.
所以今天早上我遇到了一些代码,看起来像这样:try{x=SomeThingDangerous();returnx;}catch(Exceptionex){thrownewDangerousException(ex);}finally{CleanUpDangerousStuff();}现在这段代码可以正常编译并正常工作,但是从tryblock中返回感觉不对,尤其是在有关联的finally的情况下。我的主要问题是如果finally抛出它自己的异常会发生什么?您有一个返回的变量,但也有一个异常需要处理...所以我很想知道其他人对从tryblock中返回有何看法?
finallyblock中的任何内容都(几乎)总是被执行,那么将代码封闭在其中和不封闭之间有什么区别? 最佳答案 无论是否有异常,finallyblock中的代码都会被执行。当涉及到某些你需要始终运行的内务管理功能时,这会非常方便,比如关闭连接。现在,我猜测您的问题是为什么您应该这样做:try{doSomething();}catch{catchSomething();}finally{alwaysDoThis();}什么时候可以这样做:try{doSomething();}catch{catchSomething();}alway
我看到有人说使用不带参数的catch是一种不好的形式,尤其是当catch什么都不做的时候:StreamReaderreader=newStreamReader("myfile.txt");try{inti=5/0;}catch//Noargs,soitwillcatchanyexception{}reader.Close();然而,这被认为是好的形式:StreamReaderreader=newStreamReader("myfile.txt");try{inti=5/0;}finally//Willexecutedespiteanyexception{reader.Close();}
我正在为一位friend审查一些代码,并说他在try-finallyblock内使用了return语句。即使tryblock的其余部分没有触发,Finally部分中的代码是否仍然触发?例子:publicboolsomeMethod(){try{returntrue;thrownewException("test");//doesn'tseemtogetexecuted}finally{//codeinquestion}} 最佳答案 简单的回答:是的。 关于c#-如果我在Tryblock中
C#2008我已经研究了一段时间了,但我仍然对在代码中使用finalize和dispose方法感到困惑。我的问题如下:我知道在处理非托管资源时我们只需要一个终结器。但是,如果有托管资源调用非托管资源,是否还需要实现终结器?但是,如果我开发一个不直接或间接使用任何非托管资源的类,我是否应该实现IDisposable以允许该类的客户端使用'using陈述'?实现IDisposable只是为了使您的类的客户端能够使用using语句是否可行?using(myClassobjClass=newmyClass()){//Dostuffhere}我在下面开发了这个简单的代码来演示Finalize/d