下面的代码是不好的做法吗?try//TryOverallOperation{try//Trysection1ofoperation{}catch(exceptionex){//handleexceptioncode//throwtheexception}catch(exceptionex){//sendsoapexceptionbacktoSOAPclient.}我知道,从程序审查的角度来看,其他开发人员看到2次尝试直接嵌套时可能想知道为什么,但这完全是禁忌,还是现在已被接受?谢谢大家,我同意你们关于重构的所有意见,将为子功能创建一个单独的方法,该方法变得非常长。我对所有选择它的人印象
考虑这个函数,您可以将其视为真值表:publicFoodoSomething(boola,boolb){if(a&&b)returndoAB();elseif(a&&!b)returndoA();elseif(!a&&b)returndoB();elseif(!a&&!b)returndoNotANotB();elsethrownewException("Welldone,youdefeatedbooleanlogic!");}编译器坚持最后一个else子句。但从真值表的角度来看,这是不可能的状态。是的,它有效,是的,我可以接受它。但我想知道C#中是否有某种机制可以避免这种代码,或者我
.NETFramework中是否定义了任何我不应该在我自己的代码中抛出的异常,或者这是不好的做法?我应该自己写吗? 最佳答案 您不应抛出任何因用户错误而由CLR自动抛出的异常。比如堆栈溢出异常空引用异常访问冲突异常等...原因是这样做会给调用您的API的人造成困惑。用户应该能够区分API主动抛出的异常和非主动抛出的异常(由CLR抛出)。原因是主动抛出的异常通常表示API中的已知状态。如果我调用一个API并且它抛出一个ArgumentException,我有一个合理的期望,即给定的对象处于良好状态。它认识到潜在的不良情况并积极应对。另
以下是我的通用基础存储库界面publicinterfaceIRepository{IQueryableAllIncluding(paramsExpression>[]includeProperties);}我的实体publicclassSdk{publicSdk(){this.Identifier=Guid.NewGuid().ToString();}publicvirtualICollectionAccessibleResources{get;set;}publicstringIdentifier{get;set;}}下面是具体的repopublicinterfaceISdkRepo
此代码输出“输出值”。classP{publicstaticvoidMain(){stringarg=null;try{Method(outarg);}catch{}Console.WriteLine(arg);}publicstaticvoidMethod(outstringarg){arg="outvalue";thrownewException();}}但是这个没有。classP{publicstaticvoidMain(){object[]args=newobject[1];MethodInfomi=typeof(P).GetMethod("Method");try{mi.In
我的C#Web服务应用程序遇到问题。异常不再在某个时刻被处理。应用程序直接停止,没有任何进一步的消息/故障异常。这是发生了什么:问题:在一个方法的catch部分,我抛出一个新的异常包含有关异常(exception)情况的其他信息;底层异常来self应用程序的另一部分;异常的“堆栈”大约是20,但这似乎不是这里有一个问题;当使用VS2012开发服务器(我假设是32位)或32位模式的IIS时,抛出的异常被调用方法按预期拾取(最终导致我的网络服务出现FaultException)到目前为止我采取的步骤或其他可能有用的信息:我可以很容易地重现异常;它只是停止工作每次我运行我的代码时,都是完全相
事实上我们不能使用awaitcatch中的关键字block使得在WinRT中显示来自异步方法的错误消息非常尴尬,因为MessageDialogAPI是异步的。理想情况下,我希望能够这样写:privateasyncTaskDoSomethingAsync(){try{//Somecodethatcanthrowanexception...}catch(Exceptionex){vardialog=newMessageDialog("Somethingwentwrong!");awaitdialog.ShowAsync();}}但是我必须这样写:privateasyncTaskDoSome
我的WinAppForm程序有问题,该程序包含带有WebBrowser控件DLL(GeckoFX)的选项卡控件。我的应用程序在运行时关闭,没有任何异常或任何东西。它可能在几分钟后或最多10分钟后发生。在visualstudio中,我看到应用程序以代码0终止。任何东西。在program.cs中,我捕获了所有这些未处理的异常`//AddtheeventhandlerforhandlingUIthreadexceptionstotheevent.Application.ThreadException+=newSystem.Threading.ThreadExceptionEventHandl
上面引用SO上的另一个问题+答案的block不包含适用于此处的正确答案!我有一个用于单元测试的方法。此方法的目的是确保一段代码(由委托(delegate)引用)将抛出特定异常。如果抛出该异常,则单元测试成功。如果没有抛出异常或抛出其他类型的异常,则单元测试将失败。//////CheckstomakesurethattheactionthrowsaexceptionoftypeTException.//////Thetypeofexceptionexpected.///Thecodetoexecutewhichisexpectedtogeneratetheexception.public
这个问题在这里已经有了答案:VS2015IntelliSense:ExceptionsThrownnotPreviewed(2个答案)关闭5年前。我正在通过BobTabor在MicrosoftVirtualAcademy上的“C#绝对初学者基础”类(class)学习C#。.关于异常的类(class)我已经讲到一半了。Bob提到,将鼠标悬停在某个方法上时,弹出的IntelliSense窗口会列出该方法可能存在的潜在异常。但是,在我的VisualStudio版本(CommunityEdition2015)中,IntelliSense窗口更窄,并且不包含潜在异常列表。丢失的IntelliSe