¿Cómo puedo obtener una instancia de objeto de () => foo.Title expression
Tengo una clase simple con una propiedad
class Foo
{
string Title { get; set; }
}
Estoy tratando de simplificar el enlace de datos llamando a una función como
BindToText(titleTextBox, ()=>foo.Title );
que se declara como
void BindToText<T>(Control control, Expression<Func<T>> property)
{
var mex = property.Body as MemberExpression;
string name = mex.Member.Name;
control.DataBindings.Add("Text", ??? , name);
}
so que pongo en???
para la instancia de miFoo
clase. ¿Cómo obtengo una referencia a la llamadafoo
instancia de la expresión lambda?
editar La instancia debería estar allí en alguna parte porque puedo llamar aproperty.Compile()
y cree un delegado que use lafoo
instancia dentro de miBindToText
función. Entonces mi pregunta es si esto se puede hacer sin agregar una referencia a la instancia en los parámetros de la función. Llamo a Navaja de Occum para obtener la solución más simple.
editar 2: Lo que muchos no han notado es lacierr que existe al acceder a la instancia defoo
dentro de mi función, si compilo el lambda. ¿Cómo es que el compilador sabe dónde encontrar la instancia y yo no? Insisto en que tiene que haber una respuesta,si tener que pasar un argumento extra.
Gracias a VirtualBlackFox la solución es tal:
void BindText<T>(TextBoxBase text, Expression<Func<T>> property)
{
var mex = property.Body as MemberExpression;
string name = mex.Member.Name;
var fex = mex.Expression as MemberExpression;
var cex = fex.Expression as ConstantExpression;
var fld = fex.Member as FieldInfo;
var x = fld.GetValue(cex.Value);
text.DataBindings.Add("Text", x, name);
}
que me permite simplemente escribirBindText(titleText, () => foo.Title);
.