Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从统一的函数中返回多个值?_C#_Unity3d - Fatal编程技术网

C# 如何从统一的函数中返回多个值?

C# 如何从统一的函数中返回多个值?,c#,unity3d,C#,Unity3d,我知道这是一个以前被问过的重复问题,但我发现的所有问题通常都涉及C,而不是我认为支持.NET4.6而不是最新框架的Unity 我有一个传递多个变量的函数,如果bool对几个类别中的每一个都是真的 void CheckData() { if (int 1 > int 2) { otherScript.Function(var 1, var 2, var 3) } } 该函数查询SQL数据库,并根据SQL数据定义输入的变量。有没有一种简单的方法可以返回

我知道这是一个以前被问过的重复问题,但我发现的所有问题通常都涉及C,而不是我认为支持.NET4.6而不是最新框架的Unity

我有一个传递多个变量的函数,如果bool对几个类别中的每一个都是真的

void CheckData()
{
    if (int 1 > int 2)
    {
        otherScript.Function(var 1, var 2, var 3)
    }
}
该函数查询SQL数据库,并根据SQL数据定义输入的变量。有没有一种简单的方法可以返回多个变量的值?从我所做的研究来看,似乎有一种方法可以在较新版本的.NET中实现,但Unity不支持,因为它不支持元组

我也读过有人说你可以返回一个数组,然后在函数外对数据进行排序,但我读过其他人说相反的话,我发现的信息不一致

谁能告诉我实现这一目标的最简单方法?如果需要的话,我只需要对每个变量进行硬编码并手动执行,但我正在努力保持代码的整洁,以便在花数小时编写错误代码之前,有更好的方法来执行

编辑:建议的复制帖子链接展示了如何通过创建另一个类来实现这一点,但我正在寻找一个更简单的解决方案,答案如下。谢谢。

您必须在c中使用out关键字。这是专门为这种情况设计的

下面是一个简单的例子:

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;
    }
 }
您必须在c中使用out关键字。这是专门为这种情况设计的

下面是一个简单的例子:

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;
    }
 }

解决方案仍然是元组

但是不支持Unity,因为它不支持元组

Unity现在支持元组,您需要Unity 2017或更高版本才能使用它。转到编辑->项目设置->播放器->其他设置->配置->脚本运行时版本->相当于.NET 4.x的版本

重新启动Unity,您应该可以使用Visual Studio和Tuple


如果仍然使用低于2017的Unity版本,则应使用out参数或甚至列表填充参数中的数据。

解决方案仍然是元组

但是不支持Unity,因为它不支持元组

Unity现在支持元组,您需要Unity 2017或更高版本才能使用它。转到编辑->项目设置->播放器->其他设置->配置->脚本运行时版本->相当于.NET 4.x的版本

重新启动Unity,您应该可以使用Visual Studio和Tuple

如果您仍然使用低于2017的Unity版本,那么您应该使用out参数或甚至列表来填充参数中的数据。

如果元组和out对您都不起作用,在我看来,这两个选项都是非常好的选择,那么包装类呢?注意:这实际上就是元组,只是它们是泛型类型,而不是

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;
}
如果tuple和out在我看来都是非常好的选择,那么包装器类怎么样?注意:这实际上就是元组,只是它们是泛型类型,而不是

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;
}

您也可以使用ref键通过引用传递值,但在将其传递给函数之前必须对其进行初始化,以下是一些很好的答案:顺便说一下,您在void CheckData中键入了两次b,我想您希望最后一个是c,对吗?这正是我要找的,谢谢。实际上,我确实按照@Felipe Gutierrez的建议使用了ref,但out和ref是我需要学习的方法。你为我节省了很多时间,我很感激。欢迎你!但请注意,ref和out的用途不同。ref是为传递引用而设计的避免复制和输出是为获取值而设计的您也可以使用ref键通过引用传递值,但在将其传递给函数之前必须对其进行初始化,这里有一些很好的答案:顺便说一下,在void CheckData中键入了两次b,我猜你希望最后一个是c,对吧?这正是我想要的,谢谢。实际上,我确实按照@Felipe Gutierrez的建议使用了ref,但out和ref是我需要学习的方法。你为我节省了很多时间,我很感激。欢迎你!但请注意,ref和out的用途不同。ref设计用于传递参考,避免复制,out设计用于获取值