Выберите свойство модели, используя лямбда, а не строковое имя свойства.

Я создаю список свойств типа, который нужно включить в экспорт коллекции этого типа. Я бы хотел сделать это без использования строк для имен свойств. В список должны быть включены только определенные свойства типа. Я бы хотел сделать что-то вроде:

exportPropertyList<JobCard>.Add(jc => jc.CompletionDate, "Date of Completion");

Как я могу реализовать этот общий метод Add? Кстати, строка - это описание свойства.

9
задан ProfK 24 August 2010 в 17:02
поделиться

1 ответ

Вы можете получить объект PropertyInfo, изучив переданное выражение. Что-то вроде:

public void Add<T>(Expression<Func<T,object>> expression, string displayName)
{
    var memberExpression = expression.Body as MemberExpression;
    PropertyInfo prop = memberExpression.Member as PropertyInfo;
    // Add property here to some collection, etc ? 
}

Это неполная реализация, потому что я не знаю, что именно вы хотите сделать со свойством - но он показывает, как получить PropertyInfo из выражения - объект PropertyInfo содержит все метаданные о свойстве. Кроме того, обязательно добавьте обработку ошибок к приведенному выше, прежде чем применять его в производственном коде (т. е. защита от того, что выражение не является MemberExpression и т. д.).

10
ответ дан 4 December 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: