我目前正在开发一个自动生成API的反射项目。其中一个任务是生成样本响应,这是获取返回类型并仅通过对象生成器运行它的情况。有趣的是,我遇到了一个奇怪的问题。
希望我能够很好地解释这一点。
让我们说我的生成器类叫做'ObjectGenerator'。它将类型作为参数,并尝试从该类型生成预填充类。这就是问题出现的地方。
我有一个具有相当高效的错误处理的外部DLL,但是,在奇怪的情况下,类构造存在异常。但问题是,无论我是否使用try / catch,都不会被捕获。例如:
try
{
object Gen = new ObjectGenerator(someExternalType);
} catch (Exception ex) {
// Some exception occurred when trying to create the object
}
当创建对象时发生异常时,将忽略try catch并引发未捕获的异常,从而导致系统崩溃。
这是一个相当有趣的行为,因为我认为异常可能被捕获似乎没有。
有人可以帮我解释一下吗?这似乎不是我的代码的问题,但更通用的事情,因为这在我的代码中不止一次发生。
编辑:看起来这不仅仅是一个外部DLL,但对于任何使用ObjectGenerator的类来说更是如此...嗯 - 可能是错误的代码。
答案 0 :(得分:1)
看起来系统在之前执行对象c'tor 它会创建异常帧。
至少这是我脑海中唯一可能的解释......
答案 1 :(得分:1)
查看您的代码:
try
{
ObjectGenerator Gen = new ObjectGenerator();
object obj = Gen.GenerateObject(typeof(Test));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
你正在打电话的课程:
public class Test
{
public string t;
public Test()
{
t.Split(',');
}
}
它揭示了你调用Test
的构造函数。构造函数访问未初始化的变量t
。因此,您获得NullReferenceException
。
此外,当在 Visual Studio和调试中时,尽管存在异常处理程序,仍会抛出一些异常!
按CTRL + ALT + E查看调试时抛出的异常。