Tag: 例外

捕获.NET中的exception类

我一直听到这个 catch (Exception ex) 然而,不好的做法是,我经常在事件处理程序中使用它,例如,操作可能会进入网络,从而可能出现许多不同类型的故障。 在这种情况下,我捕获所有exception并在消息框中向用户显示错误消息。 这被认为是不好的做法吗? 除了exception之外我无能为力:我不希望它停止应用程序,用户需要知道发生了什么,并且我处于代码的顶层。 我还应该做什么? 编辑: 人们说我应该查看调用堆栈并专门处理错误,因为例如StackOverflowexception无法有意义地处理。 但是,停止这个过程是最糟糕的结果,我想不惜一切代价阻止这一过程。 如果我无法处理StackOverflow,那么就是这样 – 结果将不会比没有捕获exception更糟糕,并且在99%的情况下,就我而言,通知用户是最不好的选择。 此外,尽管我尽最大努力解决可能引发的所有可能exception,但在大型代码库中,我可能会错过一些。 对于他们中的大多数人来说,最好的防御仍然是告知用户。

exception处理 – 显示发生错误的行号?

可能重复: 在exception处理中显示行号 有人可以告诉我如何获取发生错误的代码的行号并将其显示到控制台? 其他信息,如文件名或方法名称将非常方便。

如果在C#中的Catch块中发生exception会发生什么。 在这种情况下,调用者结果也是如此

这是一个面试问题,很简单,但我对答案没有信心。 如果catch块中发生exception会发生什么? 我试图举例说明面试官试图问我的小编,请纠正我的程序如果没有编译,我真的很新。 如果在Catch中发生exception并且调用者int hat的值是什么,那么底线是会发生什么。 例如,我有以下内容: double Calculate(int x) { try { x = x/2; } catch(Exception ex) { Console.Writeline(“Message: “+ ex.Message); } finally { x = 10; } return x; } double myResult = Calculate(x); //x can be any number or 0 for example 现在有两个问题: 如果catch块中发生exception会发生什么? 另外,如何解决? (这是面试官提出类似问题的简单例子)。 如果在Calculate(x)方法中发生exception,myResult会发生什么?在所有情况下它的价值是什么? (请用例子解释每个案例) 我想通过详细解释来理解这一点。 非常感谢。

Try-Catch-Finally阻止了.NET4.5.1的问题

我有一个简单的try-catch-finally代码块,它在.NET3.5中按预期工作,但在使用.NET4.5.1创建的项目中,相同的代码表现完全不同。 基本上,在.NET4.5.1中,如果发生exception而不是我在try-catch-finally块中预期的行为,则“finally”块不会被命中。 我在不同的机器上试过,我的另外两个同事也在尝试,我们都得到了相同的结果。 这对我来说很关心,因为我使用finally块来关闭DataReader,某些连接以及诸如此类的东西。 如果在没有调试器的RELEASE模式下抛出exception或运行RELEASE编译的EXE文件,.NET4.5.1不会触发“finally”块。 在调试模式下,两个.NET版本都命中了“finally”块。 同样,下面的代码在.NET3.5 RELEASE模式下没有调试器但在.NET4.5.1中没有表现。 我错过了什么吗? 有人可以帮忙吗? class Program { static void Main(string[] args) { try { string a = null; var x = a.Length; Console.WriteLine(x); } catch (Exception ex) { throw; } finally { Console.WriteLine(“This is the finally block.”); } Console.WriteLine(“You should not be here if an exception occured!”); } }

创建自己的自定义exception有哪些最佳做法?

在前一个关于exception的问题的后续内容中,在.NET中创建自定义exception的最佳实践是什么? 更具体地说,您应该inheritanceSystem.Exception,System.ApplicationException还是其他一些基本exception?

C#是否有例外概述?

我想知道是否有一个包含所有exception类型的列表。 我知道一些例外,但我不知道所有这些例外情况。 有时候我抛出一个Exception,然后我想,也许.NET已经有了一个Exception。 例如,现在我需要一个Exception,表示进程不存在(如文件)。 所以我的问题是:有人知道找到所有例外的清单吗? 我没找到它。

如何在运行时检测程序是否在抛出的exception下执行?

我可以在运行时检测到方法Helper()中程序执行是抛出exception的结果吗? 注意,我的目标是避免扩展方法Helper()将exception对象作为输入参数。 public void MyFunc1() { try { // some code here that eventaully throws an exception } catch( Exception ex ) { Helper(); } } public void MyFunc2() { Helper(); } private void Helper() { // how can I check if program execution is the // result of a thrown exception here. }

Image.Save崩溃:{“值不能为空。\ r \ nParameter name:encoder”}

我试图将图像保存到MemoryStream但在某些条件下失败。 这是代码: 以下代码成功: Image img = Bitmap.FromStream(fileStream); MemoryStream ms = new MemoryStream(); img.Save(ms, img.RawFormat); // This succeeds. 以下代码失败: Image img = Bitmap.FromStream(fileStream); Image thumb = img.GetThumbnailImage(thumbWidth, thumbHeight, null, System.IntPtr.Zero); MemoryStream ms = new MemoryStream(); thumb.Save(ms, thumb.RawFormat); // This fails. 请注意,第二个片段正在使用使用Image.GetThumbnailImage创建的图像。 有什么不同? 有谁知道它为什么失败?

获取引发exception的方法名称

我知道。 类似的问题已经提出过。 如何获取导致exception的方法的名称 但我还没有得到确切的解决方案。 我有一个按钮单击事件,其中我有一个方法FillCombo() 。 按钮单击事件 private void button1_Click(object sender, EventArgs e) { try { cmbTemplates.Items.Clear(); lstFiles.Clear(); FillCombo(); } catch (Exception ex) { MethodBase site = ex.TargetSite; Log(ex.ToString(), site == null ? null : site.Name); } } 当我调试时,我发现FillCombo()方法发生exception。 之后我将site.Name的值作为WinIOError而不是FillCombo 。 我尝试了另一种方法GetExecutingMethodName() ,由Chris Gessler在如何获取导致exception问题的方法的名称中回答。 所以我尝试使用GetExecutingMethodName()方法发送导致exception的方法名称 Log(ex.ToString(), GetExecutingMethodName()); 但我得到的结果是System.Windows.Forms.Control.OnClick而不是FillCombo 。 如何获取导致exception的方法的实际名称?

DataTableReader对当前DataTable“TempTable”无效

每当我的代码从有效的DataTable对象创建DataTableReader时,我都会收到以下错误: “DataTableReader对于当前的DataTable’TempTable’无效。” 问题是,如果我重新启动我的机器,它可以在不确定的时间内正常工作,然后用上述方法消失。 抛出此错误的代码可能已经工作了好几个小时然后:爆炸。 你得到这个错误。 它也不仅限于一条线; 它是使用DataTableReader的每个位置。 此外,此错误不会发生在生产Web服务器上 – 永远。 这让我疯狂了一周的最佳时间,而且我没有在谷歌上找到任何可以帮助的东西(因为我非常肯定这不是编码问题)。 一些技术信息: DEV Box:Vista 32bit(所有当前Windows更新)Visual Studio 2008 v9.0.30729.1 SP dotNet Framework 3.5 SP1 SQL Server:Microsoft SQL Server 2005标准版 – 9.00.4035.00(X64)Windows 2003 64位(包含所有当前Windows更新) Web服务器:Windows 2003 64位(所有当前Windows更新) 任何帮助,想法或建议将不胜感激! 更新1: 好的 – 现在尝试了以下但没有成功: 1:重新启动2:SFC / ScanNow 3:更改SQL Server 4:尝试使用DataTableReaders的另一种方法5:清除解决方案 我唯一能找到的就是将Visual Studio实例中的代码复制并粘贴到另一个具有简单控制台应用程序的代码中。 然后按预期工作(查询数据库并将结果放入dataTable,在该表上创建一个datatablereader,然后在调用.Read()之前查询hasrow …所有这些都有效。 我正在努力寻找可能导致这种情况的原因,因为没有代码错误 – 我100%肯定,因为它在发布到网络服务器时运行得很好。