我已经创建了一个方法,将异常记录到名为Logs的文件夹中,并将其保存在文本文件中。文本输出的格式如下:
Main thread has thrown an exception @ ClassName::MethodName : Exception.ToString();
ClassName::MethodName
是一个文本,应该包含哪个类和哪个方法抛出它(在执行任务时)。怎么可能传递这些论点?例如,如果我有一个名为“Test”的类,并且我有这个方法:
public void DoSomething() {
try {
this.Name = "Test";
} catch (Exception e) {
MainForm.Instance.LogException(e);
}
然后,如果抛出异常,将传递并显示参数Test::DoSomething
。怎么可能在C#中做到?
答案 0 :(得分:2)
您可以使用Reflection
..
public void DoSomething() {
try {
this.Name = "Test";
} catch (Exception e) {
var method = System.Reflection.MethodBase.GetCurrentMethod();
var methodName = method.Name;
var className = method.ReflectedType.Name;
MainForm.Instance.LogException(String.Format("{0} - {1}:{2}", className, methodName, e));
}
答案 1 :(得分:1)
该异常具有StackTrace属性,该属性为您提供尽可能多的信息,告知抛出异常的位置。
答案 2 :(得分:1)
您可以使用以下代码:
public static void DoSomething()
{
try
{
throw new InvalidOperationException("Exception");
}
catch (Exception e)
{
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame = stackTrace.GetFrame(0);
Console.WriteLine("Class Name: {0}, Method Name: {1}", stackFrame.GetMethod().Module, stackFrame.GetMethod().Name);
}
}
答案 3 :(得分:0)
e.StackTrace.GetFrame(0)
会为您提供最新的StackFrame
。
鉴于此,e.StackTrace.GetFrame(0).GetMethod()
将为您提供MethodBase
的实例,从此实例中,您可以获取方法名称和类