Zajmuję się tworzeniem interfejsu API, który używa wyrażeń lambda do określania właściwości. Używam tego słynnego fragmentu kodu podobnego do tego (to jest uproszczony i niepełny, żeby wyjaśnić, co mam na myśli):C#: Pobieranie nazw właściwości w łańcuchu z wyrażenia lambda
public void Foo<T, P>(Expression<Func<T, P>> action)
{
var expression = (MemberExpression)action.Body;
string propertyName = expression.Member.Name;
// ...
}
Aby nazwać tak:
Foo((String x) => x.Length);
teraz chciałbym, aby określić ścieżkę nieruchomości przez łańcuchowym nazwy właściwości, na przykład:
Foo((MyClass x) => x.Name.Length);
Foo powinien móc podzielić ścieżkę do jego nazwy własności ("Name"
i "Length"
). Czy jest jakiś sposób na zrobienie tego przy rozsądnym wysiłku?
Jest somehow similar looking question, ale myślę, że starają się łączyć wyrażenia lambda tam.
Another question również zajmuje się nazwami zagnieżdżonych właściwości, ale tak naprawdę nie rozumiem, o czym mówią.
Wow, to działa, i to jest dość proste. Wielkie dzięki! –
@StefanSteinegger Stare pytanie, wiem ... ale jeśli to tylko nazwy, których potrzebujesz, 'expr.ToString(). Split (". '). Pomiń (1) 'byłoby jeszcze prostsze :) – asgerhallas
@asgerhallas: ty może dodać kolejną odpowiedź. –