Использование встроенных лямбда-функций в качестве аргумента - PullRequest
3 голосов
/ 10 июля 2019

При желании я отображаю некоторое содержимое в редакторе Unity на основе параметров, выбранных для данного компонента, это будет использоваться при отображении сводки параметров, выбранных для данного текущего компонента.

Как я могу сделать встроенную функцию, которая возвращает строку, я хочу, чтобы эта функция была встроенной, потому что их будет много, и они будут полезны только в той строке, в которой они используются.

Я предоставил фрагмент кода, который может прояснить, что я пытаюсь сделать.

Я использовал лямбда-функции, подобные этой, в c ++ и JavaScript, но не в c #, и я попытался найти ответ о том, какиспользуйте их в C #.

var script = target as ButtonManager;//get reference to this Component 

EditorGUILayout.LabelField("Your current Interactive configuration", 
            "Parent: " + script.sceneParent.name + "\n",
            "Popup? " + ()=>{ if (script.isPopup) { return "Popup" } else { return "Change Scene"} }
            + "\n"
            );

Редактировать: Я могу использовать троичный оператор для решения этой проблемы , но Мне любопытно, чтокак это будет работать с лямбда-функциями .

Ответы [ 3 ]

2 голосов
/ 10 июля 2019

Для использования встроенного делегата в конкатенации строк необходимо создать новый Func<string> из анонимного метода и выполнить его:

EditorGUILayout.LabelField("Your current Interactive configuration", 
            "Parent: " + script.sceneParent.name + "\n",
            "Popup? " + new Func<String>(()=>{ if (script.isPopup) { return "Popup"; } else { return "Change Scene";} })()
            + "\n"
            );

тьфу. Вы также должны учитывать такие вещи, как закрытие переменных. Все это говорит о том, что троичный оператор здесь более чистое решение.

1 голос
/ 10 июля 2019

Как насчет использования троичного оператора?вместо ()=>{ if (script.isPopup) { return "Popup" } else { return "Change Scene"} } используйте ((script.isPopup) ? "Popup" : "Change Scene").
Также вы можете использовать делегатов

1 голос
/ 10 июля 2019

А как насчет троичного оператора .Примерно так:

return script.isPopup ? "Popup" : "Change Scene";

Это также может быть полезно https://stackoverflow.com/a/38451083/2946329

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...