Bonjour,
J'ai récupéré un code en C# que je voulais convertir en VB mais 2 lignes de code sont pour moi incompréhensible . Quelqu'un saurait-il me dire ce que font les lignes que voici :
[i]Func<ResultExecutedContext> continuation = () =>
{
Invoke(actionResult);
return new ClsResult(ctrl, actionResult, false, null );
};
Func<ClsResult> Result = filters.Reverse().Aggregate(continuation,
(next, filter) => () => InvokeFilter(filter, preContext, next));
/i
et peut-être une idée du code VB corresponsant .
J'ai mis, après, un peu plus de code pour la compréhension.
Merci.
protected virtual ClsResult InvokeAction(ICtrol ctrl, IList filters, IActionResult actionResult)
{
ClsResultContext preContext = new ClsResultContext(ctrol, actionResult);
Func<ResultExecutedContext> continuation () >
{
Invoke(actionResult);
return new ClsResult(ctrl, actionResult, false, null );
};
Func<ClsResult> Result = filters.Reverse().Aggregate(continuation,
(next, filter) => () => InvokeFilter(filter, preContext, next));
return Result();
}
private ClsResult InvokeFilter(IResultFilter filter, ClsResultContext preContext, Func<ClsResult> continuation)
{
//Execution du filtre
filter.OnResultExecuting(preContext);
//Si l'execution est annulée
if (preContext.Cancel)
{
return new ClsResult(preContext.Controller, preContext.Result, true , null );
}
bool wasError = false;
ClsResult postContext = null;
try
{
postContext = continuation();
}
catch (Exception ex)
{
wasError = true;
postContext = new ClsResult(preContext.Controller, preContext.Result, false, ex);
filter.OnResultExecuted(postContext);
if (!postContext.ExceptionHandled)
{
throw;
}
}
if (!wasError)
{
filter.OnResultExecuted(postContext);
}
return postContext;
}
private void Invoke(IActionResult actionResult)
{
actionResult.ExecuteResult(this);
}
Afficher la suite