gpt4 book ai didi

c# - 处理 DynamicObject 缺失成员的首选方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:08 26 4
gpt4 key购买 nike

通常,当您覆盖/实现 bool TryDoSomething(...) 方法时,如果它不起作用,您将返回 false

DynamicObject 的情况下,我们返回 false 并且它抛出一个仅包含一般错误消息的异常。

为了

public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)

会是

Cannot invoke a non-delegate type

就是这样。既没有任何信息哪个成员不起作用,也没有参数是什么。

为了改进这一点,我将抛出我自己的异常而不是返回 false,因为无论如何它都会失败。

public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
// ...
throw new Exception($"Method '{binder.Name}' not found.");
// ...
}

这是唯一/最好的方法还是已经有其他方法了?

这以某种方式打破了 TryDoSomething 模式,但另一方面它无论如何都会失败,为什么不呢?它会破坏任何东西吗?

最佳答案

“Try”方法的模式是返回一个 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;
}
}

关于c# - 处理 DynamicObject 缺失成员的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38663604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com