通常,当您覆盖/实施bool TryDoSomething(...)
方法时,如果它不起作用,则返回false
。
如果DynamicObject
我们返回false
,它会抛出一个只包含一般错误消息的异常。
有关
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
它将是
无法调用非委托类型
就是这样。没有任何成员不起作用的信息也没有参数是什么。
要改进,我只会抛出自己的异常,而不是返回false
,因为它无论如何都会失败。
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
// ...
throw new Exception($"Method '{binder.Name}' not found.");
// ...
}
这是唯一/最佳方式吗?还是已经有其他东西?
这在某种程度上打破了TryDoSomething
模式,但另一方面它会失败,所以为什么不呢?会破坏什么吗?
答案 0 :(得分:0)
"尝试"的模式方法是返回bool并吞下异常。
也许最好在InvokeMember周围编写自己的包装器。您应该能够创建一个扩展方法来处理此
public static class Extensions
{
public static object CustomInvokeMember(this Type t, string name, BindingFlags invokeAttr, Binder binder,
object target, object[] args)
{
try
{
return t.InvokeMember(name, invokeAttr, binder, target, args);
}
catch (Exception e)
{
//TODO: parsing, custom handling, etc
}
return null;
}
}