如何创建一个方法,而不是在C#中的任何异常上执行?

sha*_*raj 2 .net c# exception-handling

try
{
}
catch (Exception objEx)
{
    clsLog.blnLogError(this.GetType().Name, MethodBase.GetCurrentMethod().Name, String.Format("Error In {0}...", MethodBase.GetCurrentMethod().Name), objEx.Message);
}
Run Code Online (Sandbox Code Playgroud)

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在那个异常类中,我需要获取curent类名和方法名,而不是每次都写.

怎么做到这一点?

UPDATE

[Serializable]
public class MyException : Exception
{
    public MyException(string message, Exception innerException, object obj)
        : base(message, innerException)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)
try
{
    int f = int.Parse("d");
}
catch (MyException objEx)
{
}
Run Code Online (Sandbox Code Playgroud)

它没有捕获异常,我需要方法名称,它引发错误的类名称.

Spo*_*xus 7

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

要创建扩展方法,请创建一个包含执行工作的静态方法的静态类.在前面添加关键字的方法的第一个参数this,向编译器指示可以像第一个参数类型的对象上的成员方法一样调用此方法(在您的情况下Exception):

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你可以在每个异常上调用该方法:

try
{
    int f = int.Parse("d");
}
catch(Exception ex)
{
    ex.Log();
}
Run Code Online (Sandbox Code Playgroud)

有关扩展方法的更多信息,请参阅C#编程指南.