gpt4 book ai didi

c# - DynamicMethod.TryInvokeMember() 相对于使用字典作为参数的优势?

转载 作者:行者123 更新时间:2023-11-30 13:33:33 27 4
gpt4 key购买 nike

在 C# 4.0 中使用的优点是什么(除了语法)

DynamicObject.TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) 

仅调用具有此签名的非动态方法:

public object MethodParser(string methodName, Dictionary<string, object> arguments) 

其中 methodName 是“方法”参数的名称,是参数名称和参数值的字典(MethodParser 只是一个任意名称)

换句话说,调用

foo.NonExistentMethod(arg1:"a1", arg2:3.14m)

结束

foo.MethodParser("NonExistentMethod", new Dictionary<string, object>(){{"arg1", "a1"}, {"arg2": 3.14m}})

最佳答案

您无需在 DynamicObject 之外进行重构,就可以更轻松地进行性能调优。例如,如果在分析时您发现对该对象的特定动态方法调用是一个热点,您可以只在 DynamicObject 上静态添加该特定方法,您不仅会得到一个非字符串查找动态调用(在第一个之后调用),但您随后可以以干净的方式优化您的特定实现,将其与其余动态代码分开。

或者您可以为整个动态代码编写一个更优化的 IDynamicMetaObjectProvider 而不是使用 DynamicObject(就像 Microsoft 为 ExpandoObject 所做的那样),这样它就不需要像 MethodParser< 这样的每个后续调用都依赖字符串查找TryInvokeMember 会。

如果成员名不是真正重要的,则很难从示例中看出您可以使用 DynamicObject.TryInvoke 静态声明返回动态对象的属性 getter,然后您将得到一些名称部分的自动完成,并且仍然可以有动态参数名称。

但很明显,我们应该忽视的主要优势是 MethodParser 的可读性要差得多。

关于c# - DynamicMethod.TryInvokeMember() 相对于使用字典作为参数的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181585/

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