如何创建一个可以在C#中的任何异常上执行的方法?

如何创建一个可以在C#中的任何异常上执行的方法?,c#,.net,exception-handling,C#,.net,Exception Handling,这是我的代码,我需要类似的东西 try { } catch (Exception objEx) { clsLog.blnLogError(this.GetType().Name, MethodBase.GetCurrentMethod().Name, String.Format("Error In {0}...", MethodBase.GetCurrentMethod().Name), objEx.Message); } 在这个异常类中,我需要获取当前的类名和方法名,而不是每次都写入

这是我的代码,我需要类似的东西

try
{
}
catch (Exception objEx)
{
    clsLog.blnLogError(this.GetType().Name, MethodBase.GetCurrentMethod().Name, String.Format("Error In {0}...", MethodBase.GetCurrentMethod().Name), objEx.Message);
}
在这个异常类中,我需要获取当前的类名和方法名,而不是每次都写入

如何做到这一点

更新

catch (MyException objEx)
{
}

class MyException
{
    method()
    {
        //method overload with necessary parameters.
        clsLog.blnLogError(this.GetType().Name, MethodBase.GetCurrentMethod().Name, String.Format("Error In {0}...", MethodBase.GetCurrentMethod().Name), objEx.Message);
    }
}

它没有捕获异常,我需要它抛出错误的方法名和类名。

这不能通过继承来完成,您需要编写一个扩展方法,以便可以对所有异常类型调用日志记录方法,无论它们是否由您自己声明

要创建扩展方法,请创建一个静态类,其中包含执行工作的静态方法。在方法的第一个参数前面加上关键字
this
,向编译器表明此方法可以像第一个参数类型的对象上的成员方法一样调用(在您的例子中是
异常
):

然后可以对每个异常调用该方法:

public static class ExceptionExtensions
{
    public static void Log(this Exception ex)
    {
        var stackTrace = new StackTrace();
        var callingMethod = stackTrace.GetFrame(1).GetMethod();
        var methodName = callingMethod.Name;
        var className = callingMethod.DeclaringType.Name;
        clsLog.blnLogError(className, methodName, string.Format("Error In {0}...", methodName), ex.Message);
    }
}

有关扩展方法的更多信息,请参见。

您必须从
异常
派生
MyException
。如果我理解您试图执行的操作,它将不起作用:
方法
中的当前类名将是
MyException
,方法名将是
method
try
{
    int f = int.Parse("d");
}
catch (MyException objEx)
{
}
public static class ExceptionExtensions
{
    public static void Log(this Exception ex)
    {
        var stackTrace = new StackTrace();
        var callingMethod = stackTrace.GetFrame(1).GetMethod();
        var methodName = callingMethod.Name;
        var className = callingMethod.DeclaringType.Name;
        clsLog.blnLogError(className, methodName, string.Format("Error In {0}...", methodName), ex.Message);
    }
}
try
{
    int f = int.Parse("d");
}
catch(Exception ex)
{
    ex.Log();
}