2011-08-12 8 views
10

¿Es posible determinar qué tipo de espera espera un miembro dinámico? He intentadoDeterminación del tipo esperado de un acceso de miembro de DynamicObject

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

Y en el TryGetMember intercepción GetMemberBinder.ReturnType es objeto de cualquier manera. También implementé TryConvert preguntándome si podría invocarse para hacer la conversión, pero nunca se golpea.

¿Hay algún otro reemplazo que me falta que me permita determinar qué Tipo desea el llamador para poder hacer la conversión adecuada?

Respuesta

9

En C#, cuando se usa dynamic, el compilador siempre establece el enlazador para devolver el tipo de objeto, y luego realiza una segunda conversión dinámica implícita al tipo de retorno esperado. Entonces, en un DynamicObject cuando se llama desde C#, GetMemberBinder.ReturnType siempre será un objeto, pero dicho eso, si devuelves otro tipo de objeto dinámico de trampolín con TryConvert implementado podrías obtener ese tipo, excepto si el usuario hace var or dynamic como la variable, entonces ellos tener un proxy que no hará nada hasta que se tipea estáticamente.

ImpromptuInterface hace algo diferente pero en esta línea, porque también tiene el deseo de tener una implementación dinámica que cambie en función de los tipos de devolución; solo tendría que describir el objeto dinámico a través de una interfaz.

Cuestiones relacionadas