Итак, я использую следующую утилиту для получения имени поля/свойства из экземпляра класса...
public static string FieldName<T>(Expression<Func<T>> Source)
{
return ((MemberExpression)Source.Body).Member.Name;
}
Это позволяет мне сделать следующее:
public class CoolCat
{
public string KaratePower;
}
public class Program
{
public static Main()
{
public CoolCat Jimmy = new CoolCat();
string JimmysKaratePowerField = FieldName(() => Jimmy.KaratePower);
}
}
Это отлично подходит для сериализации и других случаев, когда мне нужно строковое представление имени поля.
Но теперь я хочу иметь возможность получить имя поля БЕЗ экземпляра класса — например, если я настраиваю таблицы и хочу динамически связать имена полей столбцов с фактическими полями в классе (чтобы рефакторинг и т. д. не нарушил его).
это, но я предполагаю, что это будет выглядеть примерно так:
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".
}
}
Надеюсь, это имеет смысл — я не очень хорошо разбираюсь в словарном запасе по этой теме, поэтому я знаю, что вопрос немного расплывчатый