Метод dynamic/ExpandoObject выдает «Не найден член по умолчанию для типа «Действие»

Я не могу заставить динамический метод ExpandoObject напрямую вызываться в VB.NET. В С# работает следующее:

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, чтобы я мог вызывать его без вызова?


person NDJ    schedule 02.06.2014    source источник


Ответы (1)


Кажется, нет способа обойти это - вам нужно использовать «Invoke» для вызова динамически добавляемых методов в 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

person Dave Doknjas    schedule 02.06.2014