类似于动态数组
Something like dynamic array
伙计,我想做动态数组之类的东西,但我不想使用列表。
public Texture2D[] spritHouses;
protected override void LoadContent()
{
LoadTextures(spritHouses, @"Sprits/Guns/", "Big", "Medium", "Small");
//The array spritHouses is still null...
}
public void LoadTextures(Texture2D[] texture, string trace, params string[] names)
{
texture = new Texture2D[names.Count()];
for (int i = 0; i <= names.Count()-1; i++)
texture[i] = Content.Load<Texture2D>(trace + names[i]);
}
为什么创建新实例不起作用?
首先,您不太清楚为什么不想使用 List。
虽然,根据您的代码,我假设您的真正意思是您想要从硬编码的字符串数组(纹理名称)创建纹理数组。
但在我向您展示另一种方式之前,让我解释一下为什么 spriteHouses
仍然为空。
当您将 spritHouses
作为参数传递给 LoadTextures
方法时,您实际做的是传递 copy "value"(即 null)到方法。这意味着 texture
变量在方法开始时将为 null,但随后您要为其分配一个新值 new Texture2D[names.Count()];
.
此时texture
变量已经有了你想要的,但是当方法returns时,这个数组的本地副本被丢弃,spriteHouses
仍然是null。这有意义吗?
无论如何,简单的解决方法是 return 新数组而不是将其作为参数传入。
public Texture2D[] spritHouses;
protected override void LoadContent()
{
spritHouses = LoadTextures(@"Sprits/Guns/", "Big", "Medium", "Small");
}
public Texture2D[] LoadTextures(string trace, params string[] names)
{
var textures = new Texture2D[names.Count()];
for (int i = 0; i <= names.Count()-1; i++)
textures[i] = Content.Load<Texture2D>(trace + names[i]);
return textures;
}
伙计,我想做动态数组之类的东西,但我不想使用列表。
public Texture2D[] spritHouses;
protected override void LoadContent()
{
LoadTextures(spritHouses, @"Sprits/Guns/", "Big", "Medium", "Small");
//The array spritHouses is still null...
}
public void LoadTextures(Texture2D[] texture, string trace, params string[] names)
{
texture = new Texture2D[names.Count()];
for (int i = 0; i <= names.Count()-1; i++)
texture[i] = Content.Load<Texture2D>(trace + names[i]);
}
为什么创建新实例不起作用?
首先,您不太清楚为什么不想使用 List。
虽然,根据您的代码,我假设您的真正意思是您想要从硬编码的字符串数组(纹理名称)创建纹理数组。
但在我向您展示另一种方式之前,让我解释一下为什么 spriteHouses
仍然为空。
当您将 spritHouses
作为参数传递给 LoadTextures
方法时,您实际做的是传递 copy "value"(即 null)到方法。这意味着 texture
变量在方法开始时将为 null,但随后您要为其分配一个新值 new Texture2D[names.Count()];
.
此时texture
变量已经有了你想要的,但是当方法returns时,这个数组的本地副本被丢弃,spriteHouses
仍然是null。这有意义吗?
无论如何,简单的解决方法是 return 新数组而不是将其作为参数传入。
public Texture2D[] spritHouses;
protected override void LoadContent()
{
spritHouses = LoadTextures(@"Sprits/Guns/", "Big", "Medium", "Small");
}
public Texture2D[] LoadTextures(string trace, params string[] names)
{
var textures = new Texture2D[names.Count()];
for (int i = 0; i <= names.Count()-1; i++)
textures[i] = Content.Load<Texture2D>(trace + names[i]);
return textures;
}