2017-01-10 39 views
1

我想用void返回类型来编译表达式来使用对象返回类型进行委托。我想在这种情况下得到空值。如果表达式返回类型为void,如何获得null?

var inputArg0 = Expression.Parameter(typeof(object), "arg0"); 
var inputArg1 = Expression.Parameter(typeof(CancellationToken), "arg1"); 
var inputArg0Converted = Expression.Convert(inputArg0, inputArg0Type); 
var instanceExpression = Expression.Constant(instance); 
var call = Expression.Call(instanceExpression, methodInfo, inputArg0Converted, inputArg1); 
var lambda = Expression.Lambda<Func<object, CancellationToken, object>>(call, inputArg0, inputArg1); 
var _delegate = lambda.Compile(); 

// works 
public string Ping(object e, CancellationToken cancellationToken) 
{ 
    return "OK"; 
} 

// can't compile this MethodInfo to Func<object, CancellationToken, object> 
public void Update(ObjectChangedEvent e, CancellationToken cancellationToken) 
{ 
    // do stuff 
} 
+0

请详细介绍一下您在此尝试实现的目标。 – Venemo

回答

1

你可以用返回空值,这样的函数功能的内部动作方法:

Func<object, CancellationToken, object> l = (object e, CancellationToken d) => 
{ 
    Update((ObjectChangedEvent) e, d); 
    return null; 
}; 
3

您可以使用Action!而非Func S表示void返回类型,试试这个:

Action<object, CancellationToken, object>