C# 获取异常时方法的参数值

C# 获取异常时方法的参数值,c#,exception,reflection,C#,Exception,Reflection,是否有一种方法可以知道在抛出异常时传递给方法的是什么Convert.ToBoolean(字符串mystring)当它抛出FormatException时? 这里我想知道抛出异常时mystring是什么?您必须捕获常规异常(或FormatException)并将值分配给成员。或者使用您的值重新引发新异常 使用 如何添加额外信息 catch (Exception e) { e.Data.Add("ExtraInfo", "More informatio

是否有一种方法可以知道在抛出异常时传递给方法的是什么<代码>Convert.ToBoolean(字符串mystring)当它抛出FormatException时?
这里我想知道抛出异常时mystring是什么?

您必须捕获常规异常(或FormatException)并将值分配给成员。或者使用您的值重新引发新异常

使用

如何添加额外信息

catch (Exception e)
            {
            e.Data.Add("ExtraInfo", "More information.");
            throw e;
            }
如何抓住

 catch (Exception e)
            {
            if (e.Data != null)
                {
            foreach (DictionaryEntry de in e.Data)
                    Console.WriteLine("    The key is '{0}' and the value is: {1}", 
                                                    de.Key, de.Value);                  
                }
            }
//或者简单地用字符串重新抛出一个新异常

catch (Exception ex)
{     
     throw new Exception("My string was" + yourString);
}

您仍然可以获取catch块内变量的值,只要它是try块上方声明的参数或变量
您必须捕获特定的异常,例如argumentnullexception/formatexception,或者将方法中的单个操作包装在try/catch块中,以了解引发异常的上下文

void Method(int i, string j)
{
    bool p;

    try
    {

    }
    catch(FormatException e)
    {
      //value of i, j, p are available here.
    }
}
理想的方法是检查抛出异常(如formatexceptions)的可能情况并防止它们。它们很昂贵,会中断流程。

您应该只使用它们。那么你可以说

bool value;
if(!Boolean.TryParse(myString, out value)) {
    // it didn't parse
}
// it parsed
注意:您可以将“throw e”替换为“throw”,它在包含新用户数据时仍将保留stacktrace。