2017-01-10 73 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>