lo tanto, utilizar la siguiente utilidad para obtener el nombre de un campo/propiedad de una instancia de una clase ...Obtener el nombre de un campo de una clase sin una instancia
public static string FieldName<T>(Expression<Func<T>> Source)
{
return ((MemberExpression)Source.Body).Member.Name;
}
Esto me permite hacer lo siguiente:
public class CoolCat
{
public string KaratePower;
}
public class Program
{
public static Main()
{
public CoolCat Jimmy = new CoolCat();
string JimmysKaratePowerField = FieldName(() => Jimmy.KaratePower);
}
}
Esto es muy bueno para la serialización y otras veces cuando necesito una representación de cadena del nombre del campo.
Pero ahora, quiero poder obtener el nombre del campo SIN tener una instancia de la clase; por ejemplo, si estoy configurando una tabla y quiero vincular dinámicamente los FieldNames de las columnas con los campos reales en una clase (por lo que las refactorizaciones, etc. no lo romperán).
Básicamente, me siento como si simplemente no lo entiendo muy bien la sintaxis de cómo lograr esto, pero me imagino que va a ser algo como esto:
public static string ClassFieldName<T>(Func<T> PropertyFunction)
{
// Do something to get the field name? I'm not sure whether 'Func' is the right thing here - but I would imagine that it is something where I could pass in a lambda type expression or something of the sort?
}
public class Program
{
public static Main()
{
string CatsPowerFieldName = ClassFieldName<CoolCat>((x) => x.KaratePower);
// This 'CatsPowerFieldName' would be set to "KaratePower".
}
}
espero que tenga sentido - I' No soy muy bueno con el vocabulario sobre este tema, así que sé que la pregunta es un poco vaga.
Me gusta mucho esta solución. ¿Podría explicar la sección que agregó al manejar las propiedades de Nullable? ¿Cuándo se usaría esta sección de código? –
William
Si KaratePower es un 'Nullable' o 'T?' Como 'int?' O 'DateTime?', Entonces el cuerpo no será un MemberExpression, será un UnaryExpression. A partir de ahí, debe tomar el Operando de UnaryExpression para obtener la MemberExpression correcta. –
cadrell0