我有一个函数“ReturnString”:
public static string ReturnString(string sa, string sb)
{
try
{
...
...
return "xyz";
}
catch (Exception ex)
{
throw new clsException(ex.Message);
}
}
来自其他40多个班级的电话超过600次并赢得了农场意味着它在超过40个班级中有600多个参考并赢得了农场。
当它抛出Exception时,我想知道它的最后一次调用ref是什么。异常发生时? 请帮我解决这个问题而不改变函数参数。
答案 0 :(得分:1)
我想知道它最后一次打电话给裁判是什么意思。当例外 发生?
然后检查异常 StackTrace ,它将让您知道整个调用堆栈以及最新的异常负责人。还有innerException
属性(如果有的话)。
查看Exception课程的文档。它有一个属性StackTrace
,你应该检查。
在您的情况下,异常对象应该具有ex.StackTrace
您可能还希望从您的例外对象中获取TargetSite
ex.TargetSite
属性值
答案 1 :(得分:1)
你的问题在这里:
throw new clsException(ex.Message);
正如其他人所提到的,ex
已经在StackTrace
属性中包含了您想要的信息(有关详情,请查看this link)。
但是当你抛出一个新的异常时,你只是抛出了这个消息,忽略了你想要的所有信息。
只有throw
没有新的例外情况,或者ex
作为clsException
的内部例外。
答案 2 :(得分:1)
您应该初始化 StackTrace 类的实例 -
https://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace(v=vs.110).aspx
然后,获取第一个 StackFrame -
https://msdn.microsoft.com/en-us/library/system.diagnostics.stackframe(v=vs.110).aspx
最后,获取此框架的 MethodBase ;它的“名称”属性是你需要的 -
https://msdn.microsoft.com/en-us/library/system.reflection.methodbase(v=vs.110).aspx
试试这个:
public static string ReturnString(string sa, string sb)
{
try
{
//...
//...
return "xyz";
}
catch (Exception ex)
{
StackTrace oStackTrace = new StackTrace();
string sMethodName = oStackTrace.GetFrame(1).GetMethod().Name;
//It's not a good practice to keep only the error message (you may need other exception details later)
throw new clsException(string.Format("{0}: {1}", sMethodName, ex.Message));
}
}