请问在下面的代码中,怎样把GetObject函数返回的值与一个Decimal值比较呢?谢谢class Program
{
    public static object GetObject()
    {
        int i = 1;
        return i;
    }    static void Main(string[] args)
    {
        MethodInfo mi = typeof(Program).GetMethod("GetObject", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);        Expression e1 = Expression.Call(mi);
        Expression e2 = Expression.Constant(new decimal(1));
        e1 = Expression.Convert(e1, e2.Type);
        Expression e3 = Expression.Equal(e1, e2);        LambdaExpression le = Expression.Lambda(e3);
        Delegate d = le.Compile();
        object o = d.DynamicInvoke();//这里抛出InvalidCastException
        Console.WriteLine(o.ToString());
    }
}

解决方案 »

  1.   

    能明白楼主的意思,但是不太清楚你使用Lambda表达式进行进行这个比较的意义。学习了!
      

  2.   

    为了简单,简化成下面的代码,请大家帮忙解决,谢谢!class Program
    {
        public static object GetObject()
        {
            int i = 1;
            return i;
        }    static void Main(string[] args)
        {
            MethodInfo mi = typeof(Program).GetMethod("GetObject", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);        Expression e1 = Expression.Call(mi);        Expression e2 = Expression.Convert(e1, typeof(decimal));        object o = Expression.Lambda(e2).Compile().DynamicInvoke();//InvalidCastException
            
            Console.WriteLine(o.ToString());
        }
    }
      

  3.   

    指定的转换无效,类型是否一致
    调用LambdaExpression的Compile方法动态生成一个委托对象 使用DynamicInvoke方法调用该委托对象,获取其返回值
    LambdaExpression lambda = Expression.Lambda(expr);
    Delegate d= lambda.Compile();
    d.DynamicInvoke(null);
    参考
      

  4.   


                MethodInfo mi = typeof(Program).GetMethod("GetObject", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);            Expression e1 = Expression.Call(mi);
                Expression e2 = Expression.Constant(new decimal(1));
                //e1 = Expression.Convert(e1, e2.Type);
                e1 = Expression.Convert(e1, e2.Type, typeof(Convert).GetMethod("ToDecimal", new Type[] { typeof(object) }));
                Expression e3 = Expression.Equal(e1, e2);            LambdaExpression le = Expression.Lambda(e3);
                Delegate d = le.Compile();
                object o = d.DynamicInvoke();//这里抛出InvalidCastException
                Console.WriteLine(o.ToString()); 
      

  5.   

    精简:            MethodInfo mi = typeof(Program).GetMethod("GetObject", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);            Expression e1 = Expression.Call(mi);            Expression e2 = Expression.Convert(e1, typeof(decimal), typeof(Convert).GetMethod("ToDecimal", new Type[] { typeof(object) }));            object o = Expression.Lambda(e2).Compile().DynamicInvoke();//InvalidCastException            Console.WriteLine(o.ToString()); 
      

  6.   

    如果不是可以直接强制转换的话,就要显式传入转换方法的MethodInfo