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,我有下面的代码,我不能得到数组的长度 数组大小在unity inspector中定义。错误是 错误项'不包含长度的定义' public class Item : System.Object { public string name; public int Radius = 1; public GameObject obj; } public class Gen : MonoBehaviour { public Item[] Items; int iNum

我有下面的代码,我不能得到数组的长度 数组大小在unity inspector中定义。错误是 错误
项'不包含长度的定义'

public class Item : System.Object
{
    public string name;
    public int Radius = 1;
    public GameObject obj;
}

public class Gen : MonoBehaviour {
    public Item[] Items;
    int iNum = Items.Length; // gives me an error
}

我觉得这个问题就在眼前,但这是其中的一天……

public Item[]Items-
为空。您正在声明变量(占位符),但从未将其设置为新数组


参见

公共项目[]项目-
为空。您正在声明变量(占位符),但从未将其设置为新数组


请参见

问题在于您使用另一个字段声明了一个字段初始值设定项。通过创建一个对象,然后访问获取
项的长度,您可以立即获得所需的内容,如下所示:

Items.Length

问题是您使用另一个字段声明了一个字段初始值设定项。通过创建一个对象,然后访问获取
项的长度,您可以立即获得所需的内容,如下所示:

Items.Length

必须初始化数组才能使用此函数

public Item[] Items = new Item[] { *ADD OBJECTS* };

必须初始化数组才能使用此函数

public Item[] Items = new Item[] { *ADD OBJECTS* };

问题是您正在从另一个字段的属性指定一个字段。字段在构造时初始化。要获得所需的长度,需要从属性或方法中访问长度,如:

public class Item : System.Object
{
    public string name;
    public int Radius = 1;
    public GameObject obj;
}

public class Gen : MonoBehaviour {
    public Item[] Items;
    private int iNum { get { return Items.Length; /*add null check here to be safe*/ } } 
}

问题是您正在从另一个字段的属性指定一个字段。字段在构造时初始化。要获得所需的长度,需要从属性或方法中访问长度,如:

public class Item : System.Object
{
    public string name;
    public int Radius = 1;
    public GameObject obj;
}

public class Gen : MonoBehaviour {
    public Item[] Items;
    private int iNum { get { return Items.Length; /*add null check here to be safe*/ } } 
}

问题是我们如何初始化
字段

引自:

实例字段不能用于初始化其他实例字段 在方法之外。如果您试图在外部初始化变量 方法,考虑在类内执行初始化。 构造器

其中一种方法是:

public class Gen : MonoBehaviour
{
    public Item[] Items { get; set; } = new Item[] { };
    int iNum = -1;

    //Awake is called once by Unity since Gen inherits from  MonoBehaviour
    public void Awake()
    {
        iNum = Items.Length;
    }
}

问题是我们如何初始化
字段

引自:

实例字段不能用于初始化其他实例字段 在方法之外。如果您试图在外部初始化变量 方法,考虑在类内执行初始化。 构造器

其中一种方法是:

public class Gen : MonoBehaviour
{
    public Item[] Items { get; set; } = new Item[] { };
    int iNum = -1;

    //Awake is called once by Unity since Gen inherits from  MonoBehaviour
    public void Awake()
    {
        iNum = Items.Length;
    }
}

您需要为Items数组变量指定一个数组。您只需要定义一个变量Items,该变量包含Item的数组,但实际上不包含任何内容

此外,您不能在类变量声明中调用
Items.Length
。正如程序员所说,它必须在方法或属性中完成。因为它是运行时代码。因此,您的Gen类至少应该如下所示:

public class Gen : MonoBehaviour 
{
    public Item[] Items = new Item[] { }; // Now Items has an array
    int iNum;

    void Awake()
    {  
        iNum = Items.Length; // iNum will in this case will be zero, because the array is empty.
    }
}

您需要为Items数组变量指定一个数组。您只需要定义一个变量Items,该变量包含Item的数组,但实际上不包含任何内容

此外,您不能在类变量声明中调用
Items.Length
。正如程序员所说,它必须在方法或属性中完成。因为它是运行时代码。因此,您的Gen类至少应该如下所示:

public class Gen : MonoBehaviour 
{
    public Item[] Items = new Item[] { }; // Now Items has an array
    int iNum;

    void Awake()
    {  
        iNum = Items.Length; // iNum will in this case will be zero, because the array is empty.
    }
}

您必须在此帖子中执行
Items.Length
-请确保代码与帖子中提供的错误消息一致。@yotamman您错了。您必须在函数或属性函数中执行
Items.Length
。这是我所说的
公共项目[]项目的一个例子;国际单位制;int getiNum(){iNum=Items.Length;return iNum;}
唯一得到这个消息的人是Christos和Theo。尽管如此,克里斯托斯并没有给出明确的答案。在发表进一步评论之前,请尝试在Unity中对此进行评论。我今天无法正确思考,谢谢各位!您必须在此帖子中执行
Items.Length
-请确保代码与帖子中提供的错误消息一致。@yotamman您错了。您必须在函数或属性函数中执行
Items.Length
。这是我所说的
公共项目[]项目的一个例子;国际单位制;int getiNum(){iNum=Items.Length;return iNum;}
唯一得到这个消息的人是Christos和Theo。尽管如此,克里斯托斯并没有给出明确的答案。在发表进一步评论之前,请尝试在Unity中对此进行评论。我今天无法正确思考,谢谢各位!这个问题规定数组的大小是在unity inspector中指定的,我假设这意味着它被注入到IOC中/DI@Theo,为true,但只有在注入值后才能使用。如果在事件中访问了
Items.Length
,这可能会起作用。注入?这是Unity3D(游戏引擎)问题,不是MSF Unity容器?不,不是那个Unity,这个不,应该是Unity3D。Unity3D(游戏引擎)有一个类似于Visual Studio“属性”窗口的“检查器”窗口——可以考虑使用属性窗口来设置Windows窗体或WPF窗体的初始状态。对于Unity3D,应创建对象实例,然后在创建实例后指定值。在实例化过程中使用一个字段设置另一个字段在这里是不可能的,因为变量在实例化之后才设置为任何值。问题规定数组的大小在unity inspector中指定,我假设这意味着它正在IOC中注入/DI@Theo是的,但在注入值之前,不能使用该值。如果在事件中访问了
Items.Length
,这可能会起作用。注入?这是Unity3D(游戏引擎)问题,不是MSF Unity容器?不,不是那个Unity,这个不,应该是Unity3D。Unity3D(游戏引擎)有一个类似于Visual Studio“属性”窗口的“检查器”窗口——可以考虑使用属性窗口来设置Windows窗体或WPF窗体的初始状态。对于Unity3D,应创建对象实例,然后在创建对象实例后指定值