Подтвердить что ты не робот

Могу ли я использовать параметры в Action или Func delegates?

Когда я пытаюсь использовать params в делетете Action...

private Action<string, params object[]> WriteToLogCallBack;

Я получил эту ошибку времени проектирования:

Недопустимый параметр "token token" в объявлении члена класса, структуры или интерфейса

Любая помощь!

4b9b3361

Ответ 1

Как об этом обходном пути?

private Action<string, object[]> writeToLogCallBack;
public void WriteToLogCallBack(string s, params object[] args)
{
  if(writeToLogCallBack!=null)
    writeToLogCallBack(s,args);
}

Или вы можете определить свой собственный тип делегата:

delegate void LogAction(string s, params object[] args);

Ответ 2

Параметры типа Variadic невозможны в С#.

Вот почему есть много объявлений для Action<...>, Func<...> и Tuple<...>, например. Однако это была бы интересная функция. С++ 0x имеет их.

Ответ 3

Вы можете использовать params в фактическом объявлении делегата, но не в типе одного. Общие параметры для Action - это только типы, а не фактические аргументы, которые должны быть переданы при вызове делегата. params не является типом, это ключевое слово.

Ответ 4

Вы можете попробовать это. Он допускает любое количество аргументов, и вы получите ошибку времени компиляции, если вы передадите неправильный номер или тип аргументов.

public delegate T ParamsAction<T>(params object[] oArgs);

public static T LogAction<T>(string s, ParamsAction<T> oCallback)
{
    Log(s);
    T result = oCallback();
    return T;
}

Foo foo = LogAction<Foo>("Hello world.", aoArgs => GetFoo(1,"",'',1.1));