he creado un method in C# para obtener methodnameNo se puede convertir objeto de tipo 'System.Linq.Expressions.UnaryExpression' al tipo 'System.Linq.Expressions.MemberExpression'
public string GetCorrectPropertyName<T>(Expression<Func<T, string>> expression)
{
return ((MemberExpression)expression.Body).Member.Name; // Failure Point
}
y decir que es como
string lcl_name = false;
public string Name
{
get { return lcl_name ; }
set
{
lcl_name = value;
OnPropertyChanged(GetCorrectPropertyName<ThisClassName>(x => x.Name));
}
}
esto funciona bien si la propiedad es una cadena y para todos los otros tipos da esta excepción:
No se puede convertir objeto de escriba 'System.Linq.Expressions.UnaryExpression' para escribir 'System.Linq.Expressions.MemberExpression'.
- me cambió la cadena de oponerse en firma de método, pero luego vuelve a fallar.
- me cambió la llamada
x => x.PropertyName
-x => Convert.ToString(x.PropertyName)
y todavía falla
¿Dónde estoy mal?
IMO es mejor usar una variación de esto donde el ayudante toma una 'Expresión> '. Esto cambia la sintaxis del sitio de llamada a 'GetCorrectPropertyName ((= = this.Name)', que en mi opinión es mejor escribir (no es necesario dar el parámetro de tipo genérico) y mejor para leer ('this.Name' transmite el intento extremadamente bien). –
Jon
@Jon: Buddy no dude en agregar su respuesta. Si es mejor que la respuesta actual, definitivamente aceptaré la de usted. –
No me gustaría hacer eso porque usurparía la intención de su pregunta. Pero puede obtener fácilmente el código desde [aquí] (http://compositewpf.codeplex.com/SourceControl/changeset/view/65392#1024364), Microsoft hace exactamente esto en Prism. – Jon