我可以在现有的部分类中添加错误处理吗?

时间:2019-01-20 00:23:46

标签: c# error-handling

我有一个没有错误处理的现有部分类(任何错误都将被简单地抛出到使用代码中。)

在下面的示例中,我想向MyClass添加错误管理,以便为使用方提供更好的信息。 (出于其他原因,我已经向Helper添加了MyClass局部类)。

如果可能的话,我不能做的是如何通过错误管理(捕获,转换为类错误属性等)扩展部分类。

示例:

partial class MyClass
{
    static void MyMethod()
    {
        throw new Exception("An error from MyClass.MyMethod");
    }

    void MyTest()
    {
        MyMethod();
    }
}

在这里,当调用MyTest.MyMethod()时,将引发未处理的异常。

理想情况下,我可以为MyClass添加部分扩展名,以将其捕获并管理此类错误。显然,我可以包装该类并在那里管理错误,这也许是最好的/唯一的方法,但是我想提出意见。

注意:让我们假设我实际上无法控制MyClass,在这种情况下,它是由Swagger CodeGen生成的代码,所以可以,但是我不想破坏代码的生成比我已经拥有的更多。

2 个答案:

答案 0 :(得分:1)

据我了解,您是在问是否可以通过在第二部分类文件中添加某些内容而无需对第一个文件进行任何修改来操纵方法调用/控制流。据我所知-您无法操作现有方法或局部类的控制流。局部类仅允许您将定义拆分为多个文件。我相信,在不修改原始方法的情况下,添加错误处理的唯一方法就是适应或包装(如​​果碰巧是虚拟的,则继承或继承)。

答案 1 :(得分:1)

我认为最好的解决方案是继承和/或编写类的包装器。

其他方法可能有点疯狂,例如

https://doc.postsharp.net/method-decorator

https://www.codeproject.com/Articles/16359/%2FArticles%2F16359%2FMethodLogger-Hook-into-method-calls-in-NET-binarie

但是,最好只处理使用代码中的异常。