El método estático de expresiones requiere una instancia nula, el método no estático requiere una instancia no nula

c# expression-trees

Pregunta

Soy nuevo en el uso de Expressions y recibo el siguiente error:

System.ArgumentException: el método estático requiere una instancia nula, el método no estático requiere una instancia no nula.
Nombre del parámetro: método

El código es el siguiente:

        int inP = 100;
        object inParam = inP;
        Type inParamType = inParam.GetType();

        ParameterExpression pe = Expression.Parameter(typeof(S), "pe");

        Expression left = Expression.Property(pe, typeof(S).GetProperty(propName));
        Expression right = Expression.Constant(inParam, inParamType);

        MethodInfo mi = inParamType.GetMethod(operand, BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(object) }, null);
        Expression e1 = Expression.Call(mi, left, right);

Respuesta popular

Estás utilizando BindingFlags.Instance , por lo que solo obtendrás métodos de instancia anteriores. Los métodos de instancia se deben llamar como C # af(b) , no f(a, b) , y eso se traduce en el árbol de Expression.Call(left, mi, right) , no Expression.Call(mi, left, right) . Eso es lo que te dice la excepción:

El método estático requiere una instancia nula, el método no estático requiere una instancia no nula.

En este caso, tiene un método no estático, por lo tanto, debe pasar una instancia a la que llamar el método.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow