我从第三方程序集中抛出了一个非常通用的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
由于
答案 0 :(得分:2)
问题似乎是您要打印SftpException.Message
而不是SftpException.message
(请注意小写 m )。
图书馆的作者认为(出于未知原因)最好公开一个名为message
的公共字段,而不是名为{{的属性。 1}},来自Message
基类,但包含不同的内容。
这个例子:
Exception
收益“你好”。
请注意,您还可以使用自定义void Main()
{
try
{
throw new SftpException(1, "hello");
}
catch (SftpException e)
{
Console.WriteLine(e.message);
}
}
上的ToString
来打印实际的错误消息。这也可行:
SftpException
旁注:
我使用ILSpy查看Console.WriteLine(e.ToString());
类以查看SftpException
字段的访问修饰符。它看起来像这样:
答案 1 :(得分:1)
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...
}