如何创建新的异常类并抛出它

时间:2014-01-21 08:13:27

标签: c# .net exception runtime reflection.emit

在C#.NET中,如何创建新的异常类并在运行时抛出它。 我需要在运行时根据我接收的字符串生成异常类名称作为输入。我似乎应该使用Reflection.emit,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:3)

虽然我不理解使用反射发射创建异常类型的目的,但创建异常类型与创建任何其他类型没有区别:

// Build an assembly ...
var appDomain = Thread.GetDomain();
var assemblyName = new AssemblyName("MyAssembly");
var assemblyBuilder = appDomain.DefineDynamicAssembly(
  assemblyName,
  AssemblyBuilderAccess.Run
);

// ... with a module ...
var moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule");

// ... containing a class.
var typeBuilder = moduleBuilder.DefineType(
  "MyException",
  TypeAttributes.Class,     // A class ...
  typeof(Exception)         // ... deriving from Exception
);
var exceptionType = typeBuilder.CreateType();

// Create and throw exception.
var exception = (Exception) Activator.CreateInstance(exceptionType);
throw exception;

答案 1 :(得分:0)

我认为你可以查看这篇文章的异常:http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/

此线程在运行时解决定义问题:Creating a class for an interface at runtime, in C#