Подтвердить что ты не робот

С# динамический доступ к значениям свойств по имени свойства

Проблема, которую я пытаюсь решить, заключается в том, как написать метод, который принимает имя свойства в виде строки и возвращает значение, присвоенное указанному свойству.

Мой класс модели объявлен аналогично:

public class Foo
{
    public int FooId
    public int param1
    public double param2
}

и из моего метода я хочу сделать что-то похожее на это

var property = GetProperty("param1)
var property2 = GetProperty("param2")

В настоящее время я пытаюсь сделать это, используя выражения, такие как

public dynamic GetProperty(string _propertyName)
    {
        var currentVariables = m_context.Foo.OrderByDescending(x => x.FooId).FirstOrDefault();

        var parameter = Expression.Parameter(typeof(Foo), "Foo");
        var property = Expression.Property(parameter, _propertyName);

        var lambda = Expression.Lambda<Func<GlobalVariableSet, bool>>(parameter);

    }

Правильно ли этот подход, и если да, возможно ли вернуть это как динамический тип?

Ответы были правильными, делали это слишком сложным. Решение теперь:
public dynamic GetProperty(string _propertyName)
{
    var currentVariables = m_context.Foo.OrderByDescending(g => g.FooId).FirstOrDefault();

    return currentVariables.GetType().GetProperty(_propertyName).GetValue(currentVariables, null);
}
4b9b3361

Ответ 1

public static object ReflectPropertyValue(object source, string property)
{
     return source.GetType().GetProperty(property).GetValue(source, null);
}

Ответ 2

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

Метод, который вы ищете:

public static object GetPropValue( object target, string propName )
 {
     return target.GetType().GetProperty( propName ).GetValue(target, null);
 }

Но используя "var" и "dynamic" и "Expression" и "Lambda"... вы обязательно заблудитесь в этом коде через 6 месяцев. Придерживайтесь более простых способов его написания.