Определение ожидаемого типа доступа к элементу DynamicObject - PullRequest
11 голосов
/ 12 августа 2011

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

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

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

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

1 Ответ

10 голосов
/ 13 августа 2011

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

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

...