Вы хотите использовать параметр Expression<Func<>>
и убедиться, что он содержит Body
и Member
типа PropertyInfo
, и использовать GetValue()
для передачи вашего объекта.
public static void Evaluate<TObj,TProp>(
this TObj obj,
Expression<Func<TObj, TProp>> expr)
{
var prop = (expr.Body as MemberExpression)?.Member as PropertyInfo;
var val = prop?.GetValue(obj);
if (val != null) {
//Do something
}
}
Обратите внимание, что приведенный выше код требует, чтобы переданный в лямбда-код указывал на свойствоЕсли вы хотите обрабатывать поля, а также методы, они будут представлены как различные типы выражений, и вы захотите обрабатывать их немного по-разному.Для большего контекста и использования, вот скрипка .
Редактировать: Обновлено для работы с другими типами свойств.