Come posso convertire un nome di proprietà in espressione Lambda in C#?Nome proprietà a Lambda Expression C#
Ti piace questa: string prop = "Name";
a (p => p.Name
)
public class Person{
public string Name{ get; set; }
}
Grazie!
Come posso convertire un nome di proprietà in espressione Lambda in C#?Nome proprietà a Lambda Expression C#
Ti piace questa: string prop = "Name";
a (p => p.Name
)
public class Person{
public string Name{ get; set; }
}
Grazie!
Uso alberi di espressione si può generare l'espressione 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;
}
per Person
si può chiamare come:
var exp = GetPropertySelector<Person>("Name");//exp: x=>x.Name
Questa non è una riflessione –
Sì, hai ragione. Ho corretto la risposta. –
Funziona solo per la stringa. C'è un modo per rendere Expression.Lambda
Un lambda è solo una funzione anonima. È possibile memorizzare lambda nei delegati proprio come i metodi regolari. Ti suggerisco di provare a rendere "Nome" una proprietà.
public string Name { get { return p.Name; } }
Se si vuole veramente una lambda, utilizzare un tipo delegato, come Funz.
public Func<string> Name =() => p.Name;
Un lambda non è un metodo anonimo di per sé .. –
beh sì, dal momento che non ha un nome per definire la sua posizione. –
E per quanto riguarda gli alberi di espressione? Anche loro sono delegati? : P –
espressione Un lambda non è un tipo. Intendi un delegato o un albero delle espressioni? E di * esattamente * di che tipo? –
Non capisco la tua domanda ... Vuoi trasformare una dichiarazione di variabile in un'espressione di accesso alla proprietà? –
Per favore spiega cosa stai cercando di ottenere. Convertire un nome di proprietà in Lambda non ha molto senso. Aggiungi un contesto. –