Quindi io uso il seguente programma di utilità per ottenere il nome di un campo/proprietà da un'istanza di una classe ...Prendi il nome di un campo da una classe senza un'istanza
public static string FieldName<T>(Expression<Func<T>> Source)
{
return ((MemberExpression)Source.Body).Member.Name;
}
Questo mi permette di effettuare le seguenti operazioni:
public class CoolCat
{
public string KaratePower;
}
public class Program
{
public static Main()
{
public CoolCat Jimmy = new CoolCat();
string JimmysKaratePowerField = FieldName(() => Jimmy.KaratePower);
}
}
Questo è grande per la serializzazione e altre volte in cui ho bisogno di una rappresentazione di stringa del nome del campo.
Ma ora, voglio essere in grado di ottenere il nome del campo SENZA avere un'istanza della classe - per esempio, se sto impostando una tabella e voglio collegare dinamicamente i FieldNames delle colonne ai campi effettivi in un classe (quindi i refactoring, ecc. non lo romperanno).
In sostanza, mi sento come se proprio non riesce quasi mai la sintassi di come per ottenere questo risultato, ma immagino che sarà simile a questa:
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".
}
}
Spero che abbia un senso - I' Non sono molto bravo con il vocabolario su questo argomento, quindi so che la domanda è un po 'vaga.
Mi piace molto questa soluzione: potresti approfondire la sezione che hai aggiunto alla gestione delle proprietà di Nullable? Quando si utilizzerà questa sezione di codice? –
William
Se KaratePower è un 'Nullable' o 'T?' Come 'int?' O 'DateTime?', Il corpo non sarà un MemberExpression, sarà un UnaryExpression. Da lì, è necessario prendere l'Operando di UnaryExpression per ottenere la MemberExpression corretta. –
cadrell0