0

我正在试验表达式(Microsoft.Scripting.Ast),需要将带有委托的委托变量分配给另一个实例方法,然后调用该委托。不幸的是我很无知:(

var @delegate = Expression.Variable (typeof (Delegate));
var expression = Expression.Block(
     new [] { @delegate },
     Expression.Assign(@delegate, /* MISSED PART */),
     Expression.Call(@delegate, typeof(Delegate).GetMethod("DynamicInvoke"))
);

如果我错过了什么,请告诉我。这是我最近开始的实习。所以可能根本没有意义^^

4

1 回答 1

0

答案是Expression.GetDelegateType(...)

这是为 a 创建委托的代码片段MethodInfo

public static Type GetDelegateType (this MethodInfo methodInfo)
{
  var parameterTypes = methodInfo.GetParameters ().Select (x => x.ParameterType);
  var returnType = new[] { methodInfo.ReturnType };

  var delegateTypes = parameterTypes.Concat (returnType).ToArray ();
  return Expression.GetDelegateType (delegateTypes);
} 
于 2012-07-02T10:04:14.983 回答