C# 如何创建一个新的异常类并抛出它
在C#.NET中,如何创建新的异常类并在运行时抛出它。C# 如何创建一个新的异常类并抛出它,c#,.net,exception,runtime,reflection.emit,C#,.net,Exception,Runtime,Reflection.emit,在C#.NET中,如何创建新的异常类并在运行时抛出它。 我需要在运行时根据作为输入接收的字符串生成异常类名。似乎我应该使用Reflection.emit,但我不知道如何使用。我想您可以查看本文中的例外情况: 这个线程在运行时解决了定义问题:虽然我不理解使用反射发射创建异常类型的目的,但创建异常类型与创建任何其他类型没有什么不同: // Build an assembly ... var appDomain = Thread.GetDomain(); var assemblyName = new
我需要在运行时根据作为输入接收的字符串生成异常类名。似乎我应该使用Reflection.emit,但我不知道如何使用。我想您可以查看本文中的例外情况:
这个线程在运行时解决了定义问题:虽然我不理解使用反射发射创建异常类型的目的,但创建异常类型与创建任何其他类型没有什么不同:
// 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;
你需要给我们更多的背景。老实说,这听起来不是一个好主意-您想解决什么问题?如果您在运行时生成异常类型,您希望有人如何捕获它?除非他们捕获一个基本异常类型,否则,在这种情况下,您的异常类有什么用?@Lukazoid我同意它似乎有点“不可用”,但这个问题似乎是我感兴趣要解决的。@NowHewomustnotbenamed.:我不会这么说。我要说的是,在执行时基于字符串执行它是一种代码味道。。。但是声明自己的异常类型有很好的理由。我不需要捕获它,我需要它来进行测试(我想从封闭系统中获得一些东西)。它不会被用于真正的程序中(比如说用户)。否则,我意识到这是一个非常糟糕的做法。答案不应该只包含链接,它们应该包含自己需要的信息。