2011-08-12 19 views
10

Czy można określić, jakiego typu oczekuje dostępu członek dynamiczny? PróbowałemOkreślanie oczekiwanego typu dostępu do elementu DynamicObject

dynamic foo = new MyDynamicObject(); 
int x = foo.IntValue; 
int y = (int)foo.IntValue; 

A w TryGetMember przecięcia GetMemberBinder.ReturnType jest sprzeciw w obu kierunkach. Wdrożyłem także TryConvert zastanawiając się, czy można go wywołać, aby wykonać konwersję, ale nigdy nie jest trafione.

Czy brakuje jakiegoś innego zastąpienia, które pozwala mi określić, jakiego typu osoba dzwoniąca chce, aby móc wykonać odpowiednią konwersję?

Odpowiedz

9

W języku C#, używając dynamicznego, kompilator zawsze ustawia spoiwo, aby zwrócić typ obiektu, a następnie wykonuje drugą dynamiczną niejawną konwersję do oczekiwanego typu zwrotu. Tak więc na DynamicObject po wywołaniu z C#, GetMemberBinder.ReturnType zawsze będzie obiektem, ale to powiedziawszy, jeśli zwrócisz inny rodzaj dynamicznego obiektu Trampoliny z zaimplementowanym TryConvert, możesz uzyskać ten typ, chyba że jako var or dynamic jako zmienną, to oni mieć proxy, które nic nie zrobi, dopóki nie zostanie statycznie wpisane.

robi coś innego, ale pod tym względem, ponieważ ma również chęć posiadania dynamicznej implementacji, która zmienia się w zależności od typu zwrotu - wystarczy opisać obiekt dynamiczny za pomocą interfejsu.

Powiązane problemy