Как вернуть несколько значений из функции в Unity? - PullRequest
0 голосов
/ 29 ноября 2018

Я знаю, что это повторяющийся вопрос, который задавался ранее, но все вопросы, которые я нашел, относятся к C # в целом, но не к Unity, который, я считаю, поддерживает до .NET 4.6, а не к самой новой платформе?

У меня есть функция, которая передает несколько переменных, если bool имеет значение true для каждой из нескольких категорий.

void CheckData()
{
    if (int 1 > int 2)
    {
        otherScript.Function(var 1, var 2, var 3)
    }
}

Эта функция запрашивает базу данных SQL и определяет введенные переменные на основе данных SQL.Есть ли простой способ вернуть значение нескольких переменных?Из проведенного мною исследования кажется, что есть способ сделать это в более новых версиях .NET, но не в Unity, поскольку он не поддерживает Tuples?

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

Может кто-нибудь, пожалуйста, сообщите мне самый простой способдля достижения этой цели?При необходимости я просто жестко кодирую каждую отдельную переменную и делаю это вручную, но я пытаюсь сохранить свой код в чистоте, поэтому, если есть лучший способ сделать это, я хотел бы знать, прежде чем тратить часы на неправильное кодирование чего-либо.

Редактировать: Предлагаемая повторяющаяся ссылка на публикацию показала, как этого добиться, создав другой класс, но я искал более простое решение, на которое был дан ответ ниже.Спасибо.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Решение по-прежнему Tuples.

, но не с Unity, поскольку оно не поддерживает Tuples?

Unity теперь поддерживает Tuples, и вам понадобится Unity 2017 иливыше, чтобы использовать это.Перейдите к Изменить -> Настройки проекта -> Плеер -> Другие настройки -> Конфигурация -> Версия сценариев времени исполнения -> .NET 4.x Эквивалент .

Перезапустите Unity и Visual Studio, и Tuple должны быть доступны вам.


Если вы по-прежнему используете версию Unity ниже 2017 года, вам следует использовать параметр out или даже List для заполнения данных в параметре.

0 голосов
/ 29 ноября 2018

Если tuple s и out не работают для вас (оба из которых, на мой взгляд, являются лучшими вариантами), как насчет класса оболочки?Примечание: это фактически то, чем tuple s являются , за исключением того, что они являются универсальными типами, а это не так.

public class Wrapper {
    var a, b, c;
}
public Function(var a, var b, var c ):Wrapper
{
    Wrapper outobj = new Wrapper();
    outobj.a = 1;
    outobj.b = 2;
    outobj.c = 4;
    return outobj;
}
0 голосов
/ 29 ноября 2018

Вы должны использовать ключевое слово out в c #.Это разработано специально для этого случая

модификатор параметра out (C # Reference)

А вот простой пример:

void CheckData()
{
    if (int 1 > int 2)
    {
        int a;
        int b;
        int b;
        otherScript.Function( out a, out b, out c)
    }
 }

 public class OtherScript
 {
    public Function( out int a, out int b, out in c )
    {
        a = 1;
        b = 2;
        c = 4;
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...