The problem I am trying to solve is how to write a method which takes in a property name as a string, and returns the value assigned to said property.
My model class is declared similar to:
public class Foo
{
public int FooId
public int param1
public double param2
}
and from within my method I wish to do something similar to this
var property = GetProperty("param1)
var property2 = GetProperty("param2")
I am currently trying to do this by using Expressions such as
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);
}
Is this approach correct, and if so, is it possible to return this as a dynamic type?
Answers were correct, was making this far too complex. Solution is now:
public dynamic GetProperty(string _propertyName)
{
var currentVariables = m_context.Foo.OrderByDescending(g => g.FooId).FirstOrDefault();
return currentVariables.GetType().GetProperty(_propertyName).GetValue(currentVariables, null);
}
public static object ReflectPropertyValue(object source, string property)
{
return source.GetType().GetProperty(property).GetValue(source, null);
}
You're going way overboard with the samples you provide.
The method you're looking for:
public static object GetPropValue( object target, string propName )
{
return target.GetType().GetProperty( propName ).GetValue(target, null);
}
But using "var" and "dynamic" and "Expression" and "Lambda"... you're bound to get lost in this code 6 months from now. Stick to simpler ways of writing it
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With