The MakeInputIndirect operator enables us to change the type of a parameter from X to Func<X>. Consider this example:
DelFunc.DF1 logMessage = (DateTime time, string message) =>
{
Console.WriteLine(time + ": " + message);
};
var logMessage2 = logMessage
.MakeInputIndirect(time_getTime: 0);
DelFunc.DF1 is a Delegate Function. Delegate Functions is a way to support treating lambdas as functions.
In the example, logMessage has a parameter named time of type DateTime. Using the MakeInputIndirect operator, logMessage2 now has a parameter named getTime which is a function that takes nothing and returns DateTime:
When using MakeInputIndirect we specify the existing parameter name and the new parameter name using the syntax oldParameterName_newParameterName: 0. Zero here has no meaning and could be anything. It is just to satisfy the syntax of C#.