The following demonstrates what I'd like to do.
I can get the value of a constant, instance field and property but not a variable defined in a method.
using System;
using System.Linq.Expressions;
using System.Reflection;
namespace Example
{
    class Program
    {
        private int _intField = 2;
        static void Main()
        {
            new Program().Run();
            Console.ReadLine();
        }
        private void Run()
        {
            IntProp = 3;
            var intVariable = 4;
            Test(() => 1);
            Test(() => _intField);
            Test(() => IntProp);
            Test(() => intVariable);
        }
        public int IntProp { get; set; }
        void Test<T>(Expression<Func<T>> func)
        {
            var body = func.Body;
            if (body.NodeType == ExpressionType.Constant)
            {
                Console.WriteLine(((ConstantExpression)body).Value);
            }
            else
            {
                var memberExpression = body as MemberExpression;
                var @object = memberExpression.Member.DeclaringType == GetType()
                    ? this
                    : null; //Can I do anything here? Instance of the method the variable is defined in?
                if (memberExpression.Member.MemberType == MemberTypes.Field)
                {
                    Console.WriteLine(((FieldInfo)memberExpression.Member).GetValue(@object));
                }
                else if (memberExpression.Member.MemberType == MemberTypes.Property)
                {
                    Console.WriteLine(((PropertyInfo)memberExpression.Member).GetValue(@object));
                }
            }
        }
    }
}
I need to add more detail as my post is mainly code
 
Aucun commentaire:
Enregistrer un commentaire