1

有没有办法让托管的 IronPython 引擎在访问对象实例的不存在的方法或属性后恢复脚本的执行?通常会抛出一个异常,不幸地会中断脚本的执行。

我使用几个不同的 C# 类(例如 A 类和 B 类)的实例来执行 IronPython 脚本,这些实例在它们的作用域中实现了或多或少相同的方法和属性。然而,除了两个类共享的方法和属性之外,A 类还实现了更多的方法和属性。

类 A 可能并且应该继续抛出异常,因为脚本访问的此类的方法必须存在。如果他们不这样做,那么脚本确实有问题。

然而,B 类只是可视化目的,因此 IronPython 可以忽略/跳过对此类中不存在但在 A 类中的方法的调用并继续执行。

任何的想法?非常感谢!

4

1 回答 1

1

通过从 DynamicObject 继承类 B,使用动态作为运行脚本的方法的参数类型并在类 B 中执行此操作

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        base.TryInvokeMember(binder, args, out result);
        return true;
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        base.TryInvoke(binder, args, out result);
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        base.TryGetMember(binder, out result);
        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        base.TrySetMember(binder, value);
        return true;
    }

我可以实现我的要求。以这种方式忽略对不存在的方法或属性的每次调用。无论呼叫来自什么来源。但是,对现有方法/属性的调用照常工作。

于 2013-01-08T09:14:48.070 回答