gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:01:06 24 4
gpt4 key购买 nike

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);
}
}

在那个异常类中我需要获取当前的类名和方法名而不是每次都写。

如何实现?

更新

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

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

最佳答案

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

要创建扩展方法,请创建一个静态类,其中包含一个执行您工作的静态方法。在方法的第一个参数前加上关键字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);
}
}

然后您可以在每个异常时调用该方法:

try
{
int f = int.Parse("d");
}
catch(Exception ex)
{
ex.Log();
}

有关扩展方法的更多信息,请参阅 C# Programming Guide .

关于c# - 如何创建一个可以在 C# 中的任何异常上执行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19498198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com