如何在C#中编写用户定义的异常?

Hem*_*mar 5 c# exception

嗨,任何人都可以告诉我如何在C#中编写用户定义的异常吗?正如我们在Java中可以用C#编写的那样?

Ant*_*ram 16

您希望继承System.Exception并优先提供(至少)相同的公共构造函数,并将参数传递给基础构造函数.添加您认为适合您特定需求的相关属性和/或方法.

public class MyException : System.Exception
{
     public MyException() : base() { }
     public MyException(string message) : base(message) { }
     public MyException(string message, Exception innerException) : base(message, innerException) { }
} 
Run Code Online (Sandbox Code Playgroud)


Den*_*nis 11

它实际上和Java一样 - 你扩展了Exception类.

以最基本的形式.

public class CustomException : System.Exception
{
  public CustomException()
  {
  }

  public CustomException(string message)
    : base(message)
  {
  }

  public CustomException(string message, System.Exception innerException)
    : base(message, innerException)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

为此,然后使用字段或属性添加要捕获的数据.

出于兴趣,在回答这个问题之前,我检查了自定义异常的Microsoft Design Guildlines.设计自定义例外(MSDN)

  1. 避免深度名称空间层次结构
  2. 如果可能,从一个提供的公共基础异常派生,即ArgumentException.然而,不要从中衍生出来ApplicationException.它没有害处,这样做是没有意义的.关于ApplicationException的MSDN博客文章.
  3. 使用"例外"后缀.
  4. 通过实现ISerializable接口使异常可序列化.显然,异常必须是可序列化的,才能跨应用程序域和远程处理边界正常工作.
  5. 将安全敏感信息存储在私有异常状态中,添加SecurityPermission属性以确保只有受信任的代码才能获取信息.

强烈建议您阅读MSDN上的设计指南.