18

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);
}
1
  • You can jst use System.Reflection.PropertyInfo to lookup the value of a property from a particular type. msdn.microsoft.com/en-us/library/… Commented Dec 7, 2012 at 15:41

2 Answers 2

37
public static object ReflectPropertyValue(object source, string property)
{
     return source.GetType().GetProperty(property).GetValue(source, null);
}
Sign up to request clarification or add additional context in comments.

1 Comment

I think this will throw an exception for properties that have an indexer.
8

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.