我有一个非常开始的C#问题.假设我有一个名为的类GameObject
,我想创建一个GameObject
实体数组.我可以想到编写如下代码:
GameObject[] houses = new GameObject[200];
Run Code Online (Sandbox Code Playgroud)
编译器抱怨(假设语法无效).由于这是XNA开发,我在LoadContent()
方法中加载我的纹理如下:
houses[0].Model = Content.Load<Model>("Models\\Building_01 Windowed");
Run Code Online (Sandbox Code Playgroud)
这里houses[0]
应该是一个GameObject
和可以加载这样的,但是编译器会引发这个错误:
"使用"new"关键字创建对象实例"
"在调用方法之前检查以确定对象是否为null"
我的初始化肯定有问题.
Dan*_*Tao 62
这里的问题是你已经初始化了你的数组,但没有初始化它的元素 ; 他们都是空的.因此,如果您尝试引用houses[0]
,它将是null
.
这是你可以为自己写的一个很好的小助手方法:
T[] InitializeArray<T>(int length) where T : new()
{
T[] array = new T[length];
for (int i = 0; i < length; ++i)
{
array[i] = new T();
}
return array;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以将你的houses
数组初始化为:
GameObject[] houses = InitializeArray<GameObject>(200);
Run Code Online (Sandbox Code Playgroud)
Sta*_*ley 18
对于仍在寻找的人们
Object[] obj = {
new() { key = "key", value = "value"},
new() { key = "key", value = "value"},
new() { key = "key", value = "value"},
new() { key = "key", value = "value"}
};
Run Code Online (Sandbox Code Playgroud)
Phi*_*ith 11
您正在创建一个空引用数组.你应该做的事情如下:
for (int i = 0; i < houses.Count; i++)
{
houses[i] = new GameObject();
}
Run Code Online (Sandbox Code Playgroud)
使用LINQ,您可以使用一行代码将未初始化元素数组转换为新创建对象集合.
var houses = new GameObject[200].Select(h => new GameObject()).ToArray();
Run Code Online (Sandbox Code Playgroud)
var houses = Enumerable.Repeat(0, 200).Select(h => new GameObject()).ToArray();
Run Code Online (Sandbox Code Playgroud)
然而,第一种情况在我看来更具可读性,尽管原始序列的类型并不重要.
归档时间: |
|
查看次数: |
279156 次 |
最近记录: |