我无法在ExpandoObject上获得动态方法以在VB.NET中直接调用。在C#中,以下工作原理:

dynamic obj = new System.Dynamic.ExpandoObject();
var called = false;

obj.ForceRefresh = new Action(() => called = true);

obj.ForceRefresh();


我本来以为vb.net中的同一件事是:

 Dim called = False
 Dim obj As Object = New Dynamic.ExpandoObject

 obj.ForceRefresh = New Action(Sub() called = True)

 obj.ForceRefresh() 'No default member found for type 'Action'.
 obj.ForceRefresh.Invoke() 'this works


obj.ForceRefresh抛出“找不到类型为“动作”的默认成员”

如果我调用了Invoke,它就可以工作,但这不是一个选择(这是moq单元测试的非常简化的示例,被测试的对象将调用函数,因此我无法更改它们)

有没有一种方法可以在vb.net中设置动态方法,因此无需调用即可调用它?

最佳答案

似乎没有解决办法-您需要使用“调用”来调用VB中的动态添加方法。

以下Microsoft链接显示了C#与VB示例,也证实了这一点:
http://msdn.microsoft.com/en-ca/library/system.dynamic.expandoobject.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-4

关于c# - 动态/ExpandoObject方法抛出“找不到类型为“ Action ”的默认成员”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23998905/

10-11 06:38
查看更多