Получить имя поля из класса без экземпляра

Итак, я использую следующую утилиту для получения имени поля/свойства из экземпляра класса...

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".
    }
}

Надеюсь, это имеет смысл — я не очень хорошо разбираюсь в словарном запасе по этой теме, поэтому я знаю, что вопрос немного расплывчатый

8
задан Daniel Nugent 27 July 2017 в 18:57
поделиться