So che questo è un vecchio thread, ma qui è un altro modo per farlo. Questo ha il vantaggio di essere molto più veloce se è necessario farlo in un ciclo. Ho convertito il risultato di "func" in oggetto per renderlo un po 'più generico.
var p = Expression.Parameter(typeof(string));
var prop = Expression.Property(p, "Length");
var con = Expression.Convert(prop, typeof(object));
var exp = Expression.Lambda(con, p);
var func = (Func<string, object>)exp.Compile();
var obj = "ABC";
int len = (int)func(obj);
Nella domanda originale il codice veniva utilizzato all'interno di linq quindi la velocità poteva essere buona.Sarebbe possibile utilizzare "func" direttamente nella clausola where anche se è stato compilato correttamente, ad esempio
class ABC
{
public string Name { get; set; }
}
var p = Expression.Parameter(typeof(ABC));
var prop = Expression.Property(p, "Name");
var body = Expression.Equal(prop, Expression.Constant("Bob"));
var exp = Expression.Lambda(body, p);
var func = (Func<ABC, bool>)exp.Compile();
ABC[] items = "Fred,Bob,Mary,Jane,Bob".Split(',').Select(s => new ABC() { Name = s }).ToArray();
ABC[] bobs = items.Where(func).ToArray();
Mi è piaciuto molto! Grazie. – Dementic