是否可以使用带有委托签名的 LINQ 表达式来获取ParameterInfo
参数值?
例如我定义了一个委托:
public class A
{
public delegate string[] GetInfo(int[] ids);
}
现在我需要使用表达式来获取委托参数的参数值PropertyInfo
。我能够使其Expression
工作的唯一方法是将其用作Action
:
public readonly struct DelegateInfo
{
public Type ReturnType{ get; }
public Dictionary<ParameterInfo, object> Parameters { get; }
}
public class B
{
public B()
{
var info = GetDelegateInfo<A.GetInfo>(action => action(1, 2, 3));
}
public DelegateInfo GetDelegateInfo<TDelegate>(Expression<Action<TDelegate>> exp)
where TDelegate : Delegate
{
// Get the action of the expression
var action = exp.Parameters[0];
// How to obtain the delegate ParameterInfo and values?
...
return new DelegateInfo { ... };
}
}
这是实现这一目标的正确方法吗? 有没有更好的方法?
结构更新如下:
主要的技巧是获取
Invoke
委托的方法并执行以下操作: