【问题标题】:Generating custom exception in c#在 C# 中生成自定义异常
【发布时间】:2016-01-15 23:35:21
【问题描述】:

我已尝试使用此代码引发手动异常

 protected void test ()
    try
    {
        throw new Exception("HI");     //line22
    }
    catch (Exception ex) { lblerror.Text = ex.ToString(); }

但在下面收到异常

System.ArgumentException: HI at Project_Test_M_Test.btnsubmit_Click(Object sender, EventArgs e) in D:\Project\Test\M_Test.aspx.cs:第 22 行

我想查看不是我发送的错误消息。

【问题讨论】:

  • 你为什么要这样使用异常,异常是针对意外的、不可恢复的错误。它们不应该用于以向用户显示ex.Message 的方式控制程序流将是有用的。请阅读 MSDN 指南on throwing exceptions
  • 另外,这不是自定义异常,here is a link MSDN 了解如何创建实际的自定义异常。
  • 感谢您的建议,但我是一名学生,个人认为这是学习生成异常及其处理的更好方法。但我会记住你的建议,如果卡在其他地方我会回来的。再次感谢。
  • 这只是我是否可以使用它的想法。

标签: c# exception


【解决方案1】:

请使用ex.Message 而不是ex.ToString()。 顺便说一句,抛出基类异常不是一个好主意。请使用更具体的。

【讨论】:

  • 如果您想了解更多调试信息,甚至可能是 InnerException
  • @DieterB ex.ToString() 包含 InnerException 的详细信息。 @Kapor 教人们使用 ex.Message 是让人们开始做的一个坏习惯,你会丢失很多调试信息
  • @ScottChamberlain,我怀疑有一些误解,我的意思是在构造函数中传递的字符串(示例代码中的“HI”)在只读属性ex.Message 中可用。这就是这个问题所问的 - “我想看到我发送的错误消息不是这个。”.
  • @ScottChamberlain,就Message 的使用而言,根据我的理解 - 它应该包含有用的文本,说明抛出异常的原因。理想情况下,最终用户不应看到此内容,但应将其记录下来。因此,它可以是技术性的,以便查看日志的开发人员可以在生成新版本时使用消息中的信息来修复代码。对不起,我没明白你的意思。你的意思是我也应该告诉消息属性的用法吗? (我在这篇评论中写过)?
【解决方案2】:

这是你需要做的,使用 Message 属性来访问错误信息。

 protected void test ()
 {
     try
     {
         throw new Exception("HI");  // Exception message passed from constructor
     }
     catch (Exception ex) 
     { 
         lblerror.Text = ex.Message;
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2010-12-09
    • 2017-01-05
    • 2017-06-04
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多