[英]How can I get the internal “message” value of a System.Exception?
我有一個非常通用的第三方程序集拋出的FTP異常:
Exception of type 'JSchToCSharp.SharpSsh.jsch.SftpException' was thrown.
在檢查Exception時,我看到有一個名為message (小寫m)的私有/內部成員,其中包含我的錯誤消息:
如何獲得此郵件成員的價值?
我試圖使用反射來獲取它但從GetValue返回null:
BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Static;
FieldInfo field = type.GetField(fieldName, bindFlags);
var value = field.GetValue(instance);
return value.ToString();
它似乎不是非公共或靜態的,所以我不太確定如何使用我的BindingFlags 。
謝謝
問題似乎是你打印出SftpException.Message
而不是SftpException.message
(注意小寫的m )。
該庫的作者認為(出於未知原因)最好公開一個名為message
的公共字段,而不是名為Message
的屬性,該屬性來自Exception
基類,但包含不同的內容。
這個例子:
void Main()
{
try
{
throw new SftpException(1, "hello");
}
catch (SftpException e)
{
Console.WriteLine(e.message);
}
}
收益“你好”。
請注意,您還可以在自定義SftpException
上使用ToString
來打印實際的錯誤消息。 這也有效:
Console.WriteLine(e.ToString());
邊注:
我使用ILSpy查看SftpException
類以查看message
字段的訪問修飾符。 它看起來像這樣:
從你的斷點你可以看到Exception
不是一般的異常,它有一個已知的類型,所以你實際上可以捕獲該異常類型:
try {
...
}
catch(JSchToCSharp.SharpSsh.jsch.SftpException ex1) {
// I'm sure that ex1.Message will have what you need
}
catch(Exception ex2)
{
// for any other Exception types...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.