Tag: try catch

如何在多种方法中使用try catch?

对不起,如果我的问题很愚蠢,但我有这样的代码: public Object1 Method1(Object2 parameter) { try { return this.linkToMyServer.Method1(parameter); } catch (Exception e) { this.Logger(e); } return null; } public Object3 Method2(Object4 parameter) { try { return this.linkToMyServer.Method2(parameter); } catch (Exception e) { this.Logger(e); } return null; } /* … */ public ObjectXX Method50(ObjectXY parameter) { try { return this.linkToMyServer.Method50(parameter); } catch (Exception e) […]

Try / Catch没有抓住

在下面的代码中,我故意将“@fooData”错误地输入到“@ foo111Data”以检查try语句是否正在捕获我的exception。 见下面的代码。 但是try / catch语句没有在MessageBox中捕获并显示和exception,而VS2010只是分解并突出显示错误代码行。 try { conn.Open(); cmd.Parameters.AddWithValue(“@foo111Data”, dataStrTb1.Text); cmd.ExecuteNonQuery(); } catch (SqlCeException ex) { MessageBox.Show(ex.ToString()); } finally { conn.Close(); }

catch语句与代码行的良好比例

对于大型软件中每个源代码行有多少catch语句,是否有任何经验法则? 例如,在用C#编写的一个软件中,Visual Studio显示大约350行包含单词“catch”, cloc报告我们有大约160k SLOC,30k注释行和15k空白行。 每个catch语句160k / 350大约是467行代码。 但是考虑到这一点,因为我们在自己的行上使用带有大括号的标准C#格式,所以谁知道有多少行只是160k中的单个大括号,而160k正在计算树中的一些文件是否为更长时间编译到应用程序等。我可能会猜测“有用”比率接近每400个LOC的1个捕获。 至少不出我的意料,我们错过了一个半关键的exception,它被一个空的catch块捕获,所以现在我要通过代码库,至少将exception打印到调试控制台作为临时措施,或在捕获的exception上变得更具体。 这当然会增加我们在整个应用程序中捕获的数量,但是它会将我们带到更接近“可接受”区域的位置吗? 我不知道每467 LOC有1次捕获是好的,还是好的,甚至是可怕的。 我很清楚为什么不使用空挡块。 其他/以前的维护者一直很懒惰。 由于该产品的下一个版本对时间至关重要,我现在没有时间进入并正确修复所有300(?)差的捕获语句并validation软件的正常运行(当然我们几乎没有自动化)测试使这更容易:/)。 我只是在寻找是否有任何一种“直觉”,以至于人们应该多久看一次尝试。 有几个答案说它是上下文敏感的,这是我有点怀疑但不确定。

C#Catch Exception

我会在try / catch中使用哪个例外来找出用户输入错误格式的数据的时间? 例: try { string s = textBox1.Text; // User inputs an int // Input error MessageBox.Show(s); } catch(what exception) { MessageBox.Show(“Input in wrong format”); } 谢谢

在finally块上使用未分配的局部变量

i在这个例子中什么时候可以取消分配? int i; try { i = 2; } catch { i = 3; } finally { string a = i.ToString(); }

无法捕获由PInvoke调用的C dll引起的exception

我正在编写一个使用最新MediaInfoLib Dll的C#.NET 3.5程序。 它似乎导致某些文件的exception。 我想捕获这些exception并确保我的程序继续运行, 但由于某种原因,我无法通过简单的try / catch语句来捕获它。 PInvoke方法: [DllImport(“MediaInfo.dll”)] private static extern IntPtr MediaInfo_New(); [DllImport(“MediaInfo.dll”)] private static extern IntPtr MediaInfo_Open(IntPtr Handle,MarshalAs(UnmanagedType.LPWStr)] string FileName); 用法: Handle = MediaInfo_New(); try{ MediaInfo_Open(Handle, FileName) } catch { } 调用MediaInfo_Open(Handle,FileName)可能会导致exception。 我的程序退出并且“vshost32-clr2.exe”崩溃,而不是使用try / catch语句捕获错误。 (它也作为发布版本崩溃,没有附加调试器) 在搜索网络后,我发现有人建议检查“启用非托管代码调试”,这只导致我的程序退出而没有vshost32-clr2.exe崩溃。 知道我怎么能抓住exception吗?

好奇的C#使用语句扩展

我跑ildasm发现这个: using(Simple simp = new Simple()) { Console.WriteLine(“here”); } 生成与此等效的IL代码: Simple simp = new Simple(); try { Console.WriteLine(“here”); } finally { if(simp != null) { simp.Dispose(); } } 而问题是为什么它会在最后检查null? 只有在执行try块时才会执行finally块,并且只有在Simple构造函数成功时才会执行try块(即不抛出exception),在这种情况下simp将为非null。 (如果担心在Simple构造函数和try块的开头之间可能会出现一些干预步骤,那么这确实是一个问题,因为可能会抛出一个exception,阻止finally块执行。)那么,为什么地狱? 暂且不谈(请)使用声明是否比try-finally更好的论点,我将try-finally块写成: Simple simp = new Simple(); try { Console.WriteLine(“here”); } finally { simp.Dispose(); simp = null; // sanity-check in case I touch simp again […]

在foreach条件下抛出exception

我有一个foreach循环,在foreach本身的情况下在循环中断开。 有没有办法try catch抛出exception然后继续循环的项目? 这将运行几次,直到exception命中然后结束。 try { foreach(b in bees) { //exception is in this line string += b; } } catch { //error } 这根本不会运行,因为exception是在foreach的条件下 foreach(b in bees) { //exception is in this line try { string += b; } catch { //error } } 我知道你们中的一些人会问这是怎么回事,所以这就是:Exception PrincipalOperationException被抛出,因为在GroupPrincipal (蜜蜂)中找不到Principal (在我的例子中为b)。 编辑:我添加了以下代码。 我还发现一个组成员指向一个不再存在的域。 我通过删除该成员轻松解决了这个问题,但我的问题仍然存在。 你如何处理在foreach条件下抛出的exception? PrincipalContext ctx […]

使用finally而不是catch

我现在已经看过这种模式了几次: bool success = false; try { DoSomething(); success = true; } finally { if (!success) Rollback(); } 我一直在想:为什么这比使用catch回滚更好? try { DoSomething(); } catch { Rollback(); throw; } 确保更改在失败时回滚的两种方法之间有什么区别?

是否有适合使用空挡块的情况?

可能重复: 为什么空捕获阻止了一个坏主意? 是否有任何有效理由忽略捕获的exception 你知道任何情况下空的挡块不是绝对的邪恶吗? try { … // What and When? … } catch { }