草庐IT

EXCEPTION

全部标签

c# - 什么都不抛出时的异常效率

我有一个关于在没有抛出异常的情况下使用异常处理的效率后果的假设性问题。首先看一下这个C#:intsimpleSimon,cautiousCarol,dangerousDave;try{simpleSimon=int.Parse("fail");}catch{simpleSimon=1;}try{cautiousCarol=int.Parse("1");}catch{cautiousCarol=1;}dangerousDave=int.Parse("1");我相信Dave的代码将是最快/最有效的;而Simon将因抛出异常而受到很大的惩罚。但是卡罗尔呢?由于她没有抛出异常,她会受到惩罚吗?

c# - 从任何线程捕获未处理的异常

编辑这个问题的答案有帮助谢谢我很感激你的帮助:)但我最终使用了:http://code.msdn.microsoft.com/windowsdesktop/Handling-Unhandled-47492d0b#content原始问题:我想在我的应用程序崩溃时显示一条错误消息。目前我有:App.xaml:App.xaml的代码隐藏:namespaceWpfApplication5{publicpartialclassApp:Application{privatevoidApp_DispatcherUnhandledException(objectsender,DispatcherUnh

c# - 集合中元素过多时抛出哪个异常

我希望我类(class)的集合限制为最多6个元素:publicclassFoo{privateICollectionbars;publicICollectionBars{get{returnthis.bars;}set{if(value!=null&&value.Count>6){thrownewException("AFoocanonlyhaveupto6Bars.");//Whichexceptiontothrow?}}}}在这种情况下应该抛出什么异常?根据文档,ArgumentException将被抛出:whenoneoftheargumentsprovidedtoamethod

c# - 线程和 lambda 表达式

下面两段代码有什么区别?使用第二个会有任何问题吗?场景1:privatevoidLog(Exceptione){ThreadPool.QueueUserWorkItem(newWaitCallback(Log),e);}privatevoidLog(objectobj){Exceptione=(Exception)obj;Logger.Log(e);}场景2privatevoidLog(Exceptione){ThreadPool.QueueUserWorkItem((obj)=>{Logger.Log(e);});}在场景2中,我没有将异常作为参数传递给ThreadPool。异常对象

c# - 找到最内层异常的正确方法?

我正在处理一些类,这些类在抛出时具有相对较深的InnerException树。我想记录最里面的异常并对其采取行动,这是导致问题真正原因的异常。我目前正在使用类似的东西publicstaticExceptiongetInnermostException(Exceptione){while(e.InnerException!=null){e=e.InnerException;}returne;}这是处理异常树的正确方法吗? 最佳答案 我认为您可以使用以下代码获取最里面的异常:publicstaticExceptiongetInnermo

c# - 如何在单元测试中模拟抛出异常?

如何模拟在C#单元测试中抛出的异常?我希望能够100%覆盖我的代码,但我无法测试可能出现异常的代码。例如,我无法模拟可能发生的电源故障。例如:publicvoidMyMethod(){try{...}catch(OutOfMemoryExceptione){...}catch(RandomErrorFromDatabaseLayere){...}}我希望能够模拟此方法中应捕获的任何类型的异常。有没有图书馆可以帮助我解决这个问题?编辑1:对完成我对最小起订量的要求有什么帮助吗? 最佳答案 您需要创建一个模拟对象来代替可以抛出这些异常的

c# - finally 在哪里是必要的?

我知道如何使用try-catch-finally。但是我没有得到使用finally的优势,因为我总是可以将代码放在try-catchblock之后。有没有明确的例子? 最佳答案 它几乎总是用于清理,通常通过using语句隐式地使用:FileStreamstream=newFileStream(...);try{//Readsomestuff}finally{stream.Dispose();}现在这不等同于FileStreamstream=newFileStream(...);//Readsomestuffstream.Dispos

C# - 线程中止异常(Thread Abort Exception)重新抛出自身

我有当前代码:classProgram{privatestaticvoidMain(){while(true){try{Thread.CurrentThread.Abort();}catch(ThreadAbortException){Console.WriteLine("Abort!");Thread.ResetAbort();}Console.WriteLine("nowwaiting");Console.ReadKey();}}}现在我知道ResetAbort方法应该可以防止ThreadAbortException继续重新抛出自身,即使catch语句正在捕获它,但我的问题是:如果

c# - 在 C# 属性 setter 中为 ArgumentException 分配给 'paramName' 参数的值?

如果将无效值传递给属性setter并抛出ArgumentException(或可能是从它派生的类),则应将什么值分配给paramName参数?value,因为它看起来是实际参数?传递属性的名称不是更清楚吗? 最佳答案 ArgumentExceptions包含无效的参数名称。对于属性setter,实际参数被命名为值(在源代码和生成代码中)。使用这个名称更一致。 关于c#-在C#属性setter中为ArgumentException分配给'paramName'参数的值?,我们在StackOv

c# - 如何断言 C# 异步方法在单元测试中引发异常?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoItestanasyncmethodwithNUnit,eventuallywithanotherframework?我想知道的是如何在C#单元测试中断言异步方法抛出异常?我能够在VisualStudio2012中使用Microsoft.VisualStudio.TestTools.UnitTesting编写异步单元测试,但还没有弄清楚如何测试异常。我知道xUnit.net也以这种方式支持异步测试方法,虽然我还没有尝试过那个框架。为了说明我的意思,下面的代码定义了被测系统:usingSystem;u