Как передать список функций в параметрах? (UnityAction []) - PullRequest
1 голос
/ 09 ноября 2019

У меня есть небольшая проблема с тем, как вызывать мою функцию.

Раньше мне нужен был только один параметр, и я написал такую ​​функцию (мне абсолютно необходимо вызывать ее так):

public void SetDialogs(UnityAction pFunctionClic){blablabla};
SetDialogs(() => MyClicFunction());

Теперь мне нужно иметь несколько функций в параметрах. Итак, я установил свою функцию SetDialogs следующим образом:

public void SetDialogs(UnityAction[] pFunctionClic){blablabla};

Теперь проблема в том, что я не знаю, что писать, когда я вызываю свою функцию. Очевидно,

SetDialogs(() => [MyClicFunction()]);

не работает.

Можете ли вы помочь мне, пожалуйста?

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вы можете использовать params параметр массива. Параметр params всегда должен быть последним (или единственным) в списке параметров

public void SetDialogs(params UnityAction[] pFunctionClic){ ... };

Теперь вы можете передать ему столько параметров, сколько вам нужно.

SetDialogs(() => MyClicFunction());
SetDialogs(() => MyClicFunction1(), () => MyClicFunction2());
SetDialogs(() => MyClicFunction1(), () => MyClicFunction2(), () => MyClicFunction3());

Внутри метода вы всегда видите массив. При вызове метода вам не нужно передавать ему массив (C # автоматически преобразует параметры в массив);однако вы можете:

var unityActions = new UnityAction[] {
    () => MyClicFunction1(),
    () => MyClicFunction2(),
    () => MyClicFunction3()
};
SetDialogs(unityActions);
1 голос
/ 09 ноября 2019

Я раньше не использовал Unity, но, судя по тому, что вы делаете, вы можете передать массив UnityAction как таковой:

SetDialogs(new UnityAction[] {
    () => MyClickFunction(),
    () => SomeOtherStuff(),
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...