أفضل طريقة لاستدعاء طريقة مثيل في أشجار التعبير؟

StackOverflow https://stackoverflow.com/questions/394911

  •  23-08-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لاستدعاء طريقة مثيل داخل شجرة التعبير؟ الحل الحالي هو شيء من هذا القبيل للحصول على طريقة واجهة "كائن GetRowValue (Rowindex)" من واجهة IColumn.

public static Expression CreateGetRowValueExpression(
    IColumn column, 
    ParameterExpression rowIndex)
        {
            MethodInfo methodInfo = column.GetType().GetMethod(
                "GetRowValue",
                BindingFlags.Instance | BindingFlags.Public,
                null,
                CallingConventions.Any,
                new[] { typeof(int) },
                null);
            var instance = Expression.Constant(column);
            return Expression.Call(instance, methodInfo, rowIndex);            
        }

أهناك طريق أسرع؟ هل من الممكن إنشاء التعبير دون الحاجة إلى تمرير اسم الأسلوب كسلسلة (سيئة لإعادة المرسل)؟

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك بطريقة مساعد:

MethodCallExpression GetCallExpression<T>(Expression<Func<T>> e)
{
    return e.Body as MethodCallExpression;
}

/* ... */
var getRowValExpr = GetCallExpression(x => x.GetRowValue(0));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top