Определение ожидаемого типа доступа к члену DynamicObject

Можно ли определить, какой тип ожидает доступ к динамическому члену? я пробовал

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

И в перехвате TryGetMember GetMemberBinder.ReturnType является объектом в любом случае. Я также реализовал TryConvert, задаваясь вопросом, может ли он быть вызван для выполнения преобразования, но он никогда не срабатывает.

Есть ли какое-то другое переопределение, которое мне не хватает, которое позволяет мне определить, какой Type хочет вызывающий, чтобы я мог выполнить соответствующее преобразование?


person Arne Claassen    schedule 12.08.2011    source источник


Ответы (1)


В C# при использовании динамического компилятор всегда устанавливает связыватель на возвращаемый тип объекта, а затем выполняет второе динамическое неявное преобразование к ожидаемому возвращаемому типу. Таким образом, в DynamicObject при вызове из С# GetMemberBinder.ReturnType всегда будет объектом, но при этом сказано, что если вы вернете динамический объект другого типа с реализованным TryConvert, вы можете получить этот тип, за исключением случаев, когда пользователь делает var or dynamic в качестве переменной, тогда они иметь прокси, который ничего не будет делать, пока не станет статически типизированным.

ImpromptuInterface делает что-то другое, но в том же духе, потому что он также хочет иметь динамическую реализацию, которая изменяется на основе по возвращаемым типам - просто вам нужно будет описать динамический объект через интерфейс.

person jbtule    schedule 12.08.2011