Jak przekonwertować nazwę właściwości na wyrażenie Lambda w języku C#?Nazwa właściwości do wyrażenia lambda C#
Jak to: string prop = "Name";
do (p => p.Name
)
public class Person{
public string Name{ get; set; }
}
dzięki!
Jak przekonwertować nazwę właściwości na wyrażenie Lambda w języku C#?Nazwa właściwości do wyrażenia lambda C#
Jak to: string prop = "Name";
do (p => p.Name
)
public class Person{
public string Name{ get; set; }
}
dzięki!
Korzystanie drzewa wyrażenie można wygenerować wyrażenia lambda.
using System.Linq.Expressions;
public static Expression<Func<T, object>> GetPropertySelector<T>(string propertyName)
{
var arg = Expression.Parameter(typeof(T), "x");
var property = Expression.Property(arg, propertyName);
//return the property as object
var conv = Expression.Convert(property, typeof(object));
var exp = Expression.Lambda<Func<T, object>>(conv, new ParameterExpression[] { arg });
return exp;
}
dla Person
można nazwać to lubią:
var exp = GetPropertySelector<Person>("Name");//exp: x=>x.Name
To nie jest odbicie –
Tak, masz rację. Poprawiłem odpowiedź. –
Działa to tylko dla łańcucha znaków. Czy istnieje sposób, aby Expression.Lambda
Lambda to tylko anonimowa funkcja. Możesz przechowywać lambdas w delegatach, tak jak zwykłe metody. Sugeruję, abyś spróbował nadać "Name" właściwość.
public string Name { get { return p.Name; } }
Jeśli naprawdę chcesz lambda, użyj typ delegata takich jak FUNC.
public Func<string> Name =() => p.Name;
Lambda nie jest metodą anonimową jako taką .. –
również tak, ponieważ nie ma nazwy określającej jej lokalizację. –
A co z drzewkami wyrażeń? Czy to też są delegaci? : P –
Wyrażenie lambda nie jest typem. Masz na myśli delegata lub drzewo wyrażenia? I * dokładnie * jakiego typu? –
Nie rozumiem twojego pytania ... Chcesz przekształcić deklarację zmiennej w wyrażenie dostępu do właściwości? –
Proszę wyjaśnij, co próbujesz osiągnąć. Konwertowanie nazwy właściwości na Lambda nie ma większego sensu. Dodaj kontekst. –