Я хотел бы добиться такой следующей функции:
public void MyMethod<T>(params Func<T[], void>[] funcs)
{
foreach (var func in funcs)
{
func();
}
}
public void Print1<T>(params T[] objs)
{
Console.WriteLine("==== I am in 1 ====");
}
public void Print2<T>(params T[] objs)
{
Console.WriteLine("==== I am in 2 ====");
}
static void Main()
{
MyMethod(
Print1(1, 2, 3),
Print2("1", "2", "3"),
);
}
, ожидающей выполнения вывода:
==== I am in 1 ====
==== I am in 2 ====
На данный момент мне удалось вот что:
public void MyMethod2(params Action<object>[] funcs)
{
foreach (var func in funcs)
{
Execute(func);
}
}
public Action<object> Print1<T>(params T[] objs)
{
PrintLog("==== I am in 1 ====");
return null;
}
public Action<object> Print2<T>(params T[] objs)
{
PrintLog("==== I am in 2 ====");
return null;
}
public class MyDelegateCommand : ICommand
{
public MyDelegateCommand(Action<object> executeAction) => _executeAction = executeAction;
private readonly Action<object> _executeAction;
public void Execute(object parameter) => _executeAction?.Invoke(parameter);
}
но проблема в том, что меня печатают дважды, например:
==== I am in 1 ====
==== I am in 2 ====
==== I am in 1 ====
==== I am in 2 ====
Я думаю, что причина этого второго подхода в том, что object
из Actioon<object>
не передается / возвращается, но я все равно спрашиваю меня, не будет ли лучше справиться с этим первым подходом, который я запрашиваю. Любая идея, как я мог решить эту проблему?
Заранее спасибо за любую помощь!