Estoy desarrollando una API que usa expresiones lambda para especificar propiedades. Estoy usando esta famosa pieza de código similar a ésta (esto se simplifica e incompleta, sólo para dejar claro lo que estoy hablando):C#: obteniendo los nombres de las propiedades en una cadena de la expresión lambda
public void Foo<T, P>(Expression<Func<T, P>> action)
{
var expression = (MemberExpression)action.Body;
string propertyName = expression.Member.Name;
// ...
}
que se llamará así:
Foo((String x) => x.Length);
Ahora me gustaría especificar una ruta de propiedad por el encadenamiento de los nombres de propiedades, así:
Foo((MyClass x) => x.Name.Length);
Foo debe ser capaz de dividir la ruta en sus nombres de propiedad ("Name"
y "Length"
). ¿Hay alguna manera de hacer esto con un esfuerzo razonable?
Hay una somehow similar looking question, pero creo que están tratando de combinar las expresiones lambda allí.
Another question también se trata de nombres de propiedades anidadas, pero realmente no entiendo de qué están hablando.
Wow, esto funciona, y es bastante simple. ¡Muchas gracias! –
@StefanSteinegger Pregunta anterior, lo sé ... pero si solo son los nombres que necesita, 'expr.ToString(). Split ('.'). Skip (1)' sería aún más simple :) – asgerhallas
@asgerhallas: usted puede agregar otra respuesta. –