Tengo una configuración de trabajo que no está muy tipada y se basa en la reflexión.lambda Expresión como propiedad
tengo una clase, digamos
class Person{
public string FirstName {get ; set;}
public string LastName {get; set;}
public int Age {get; set;}
...
// some more public properties
}
y
class CellInfo {
public string Title {get; set;}
public string FormatString {get; set;}
}
y tengo un diccionario como este
Dictionary<string, CellInfo> fields = new Dictionary<string, CellInfo>();
fields.Add("FirstName", new CellInfo {Title = "First Name", FormatString = "Foo"});
fields.Add("LastName", new CellInfo {Title = "Last Name", FormatString = "Bar"});
Es un diccionario sencillo con propiedad nombres y algo de información acerca ellos. que pase el diccionario a otro módulo que procesa casos persona y hago
Dictionary<string, CellInfo> fields = SomeMethodToGetDictionary();
foreach(Person p in someCollection)
{
foreach(var field in fields)
{
object cellValue = type(Person).GetProperty(field.Key).GetValue(p, null);
// use cellValue and info on field from field.Value somewhere.
...
}
}
Este método de pasar la cadena de nombre de campo y utilizando la reflexión funciona, pero me preguntaba si hay un método de establecimiento inflexible de hacer esta.
Lo que tenía en mente era tener una propiedad que almacena una expresión LINQ, algo como esto
fields.Add("FirstName", new CellInfo
{
Title = "First Name",
FormatString = "Foo",
EvalExpression = p => p.FirstName
});
y durante el uso, de alguna manera utilizar el EvalExpression
en un objeto persona y obtener el valor de la propiedad. No tengo ni idea de dónde comenzar ni cómo sería la sintaxis para tener una propiedad como esta que sea evaluable. Soy nuevo para delegados de función y árboles de expresión que ni siquiera conozco las palabras clave adecuadas para buscar. Espero que mi descripción sea clara; si no, avíseme y detallaré según sea necesario. Cualquier ayuda sería muy apreciada.
a alguien le interesa c ¿por qué downvote? – Aliostad
Podría ser el comando (en oposición a la solicitud) en la primera línea. – MikeKulls