Soy nuevo en el uso de expresiones 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);Está utilizando BindingFlags.Instance , por lo que solo recuperará métodos de instancia. Los métodos de instancia deben llamarse 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 en la que llamar al método.