函数抛出的异常,其中函数在抛出异常时调用

时间:2017-05-12 20:41:20

标签: c# function exception

我有一个函数“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是什么。异常发生时? 请帮我解决这个问题而不改变函数参数。

3 个答案:

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