类似于动态数组

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