表达式<;动作<;T>>;methodCall

本文关键字:gt lt methodCall 动作 表达式 | 更新日期: 2023-09-27 18:28:42

如何在Enqueue内部运行methodCall?

public static string Enqueue<T>(System.Linq.Expressions.Expression<Action<T>> methodCall)
{
   // How to run methodCall with it's parameters? 
}

调用方式:

Enqueue<QueueController>(x => x.SomeMethod("param1", "param2"));

表达式<;动作<;T>>;methodCall

为了实现这一点,您需要一个T的实例,以便在此实例上调用该方法。此外,您的Enqueue必须根据您的签名返回一个字符串。因此:

public static string Enqueue<T>(System.Linq.Expressions.Expression<Func<T, string>> methodCall)
    where T: new()
{
    T t = new T();
    Func<T, string> action = methodCall.Compile();
    return action(t);
}

正如您所看到的,我为T参数添加了一个通用约束,以便能够获得一个实例。如果你能够从其他地方提供这个实例,那么你可以这样做。


更新:

根据评论部分的要求,以下是如何使用Action<T>

public static string Enqueue<T>(System.Linq.Expressions.Expression<Action<T>> methodCall)
    where T: new()
{
    T t = new T();
    Action<T> action = methodCall.Compile();
    action(t);
    return "WHATEVER";
}