C# 获取数组的长度
我有下面的代码,我不能得到数组的长度 数组大小在unity inspector中定义。错误是 错误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
项'不包含长度的定义'
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,应创建对象实例,然后在创建对象实例后指定值