Я пытаюсь создать выражение, которое вызывает внутренний метод, внутренний метод имеет параметр out, возможно ли это?Создать выражение для вызова метода с параметром out
public class Program
{
static void Main(string[] args)
{
var type = typeof (Program);
var methodInfo = type.GetMethod("ValidateActiveControl", BindingFlags.Instance | BindingFlags.NonPublic);
var p1 = Expression.Parameter(type, "program");
var p2 = Expression.Parameter(typeof (bool), "validatedControlAllowsFocusChange");
var invokeExpression = Expression.Call(p1, methodInfo, p2);
var func = (Func<Program,bool, bool>)Expression.Lambda(invokeExpression, p1, p2).Compile();
var validatedControlAllowsFocusChange = true;
// I would expect validatedControlAllowsFocusChange to be false after execution...
Console.WriteLine(func.Invoke(new Program(), validatedControlAllowsFocusChange));
Console.WriteLine(validatedControlAllowsFocusChange);
}
internal bool ValidateActiveControl(out bool validatedControlAllowsFocusChange)
{
validatedControlAllowsFocusChange = false;
// Some code here...
return true;
}
}
Это все еще вызывает ошибку. Выражение типа «System.Boolean &» не может использоваться для параметра типа «System.Boolean» метода «Boolean ValidateActiveControl (Boolean ByRef)». –
Приятная находка на .NET 4. Лямбда, не проходящая мимо ссылка в 3.5 является серьезным ограничением. –