如何检查在c#全局类中找到的数组中是否存在对象

本文关键字:数组 对象 存在 是否 全局 何检查 检查 | 更新日期: 2023-09-27 18:04:47

我正在制作一款具有全局(静态)类MedGameController的游戏。在我的类中,我有两个包含15个对象的数组,每个数组包含每个玩家单位的逻辑。在游戏中,玩家将进入一个表单,在那里他们可以看到自己已经创建的单位,并拥有创建更多单位的按钮。我不知道如何检查当前单元是否存在,所以我甚至不能创建一个单元。我如何检查我的单位类的实例是否存在于数组中?单位数组必须有一个作用域,它包含两到三种形式,所以这就是为什么我在一个全局类中创建它们。下面是全局类:

static class MedGameController      
{
    static int ply1pts;
    static int ply2pts;
    Squad[] ply1squads = new Squad[15];
    Squad[] ply2squads = new Squad[15];
    public static int SetPly1Pts
    {
        get { return ply1pts; }
        set { ply1pts = value; }
    }
    public static int SetPly2Pts
    {
        get { return ply2pts; }
        set { ply2pts = value; }
    }
    public static int SquadSetUp
    {
        get { return squadcreation; }
        set { squadcreation = value; }
    }
    public static void Player1Squads
    {
        This is where I think i'm supposed to check if they exist then if it doesn't then I create the instance of the squad class
    }
}

}

如何检查在c#全局类中找到的数组中是否存在对象

试试这个:

if (ply1Squads.Length == 0)
{
    for (int i = 0; i < 15; i++)
    {
        ply1Squads[i] = new Squad();
    }
}

你已经声明了ply1Squads有15个Squad对象,所以这只是一个初始化对象的问题。

你可以对ply2Squads做同样的事情。

顺便说一句,您需要将ply1Squadsply2Squads声明为static,因为静态类不能有实例成员:

static Squad[] ply1Squads = new Squad[15];
static Squad[] ply2Squads = new Squad[15];

默认情况下,这些将是私有变量,因此您也需要为这两个数组设置属性:

public static Squad[] Ply1Squads
{
    get
    {
        return ply1Squads;
    }
    set
    {
        ply1Squads = value;
    }
}
public static Squad[] Ply2Squads
{
    get
    {
        return ply2Squads;
    }
    set
    {
        ply2Squads = value;
    }
}

额外的想法

如果你的设计目标是让MedGameController处理与小队相关的所有信息,我将远离你出现正在做的事情-为每个Squad数组(即Player1Squads)创建重复的方法。相反,应该传入某种标志,告诉控制器使用哪个数组,就像这样:

public void CreateSquads(int playerNum)
{
    select (playerNum)
    {
        case 1:
            for (int i = 0; i < 15; i++)
            {
                ply1Squads[i] = new Squad();
            }
            break;
        case 2:
            for (int i = 0; i < 15; i++)
            {
                ply2Squads[i] = new Squad();
            }
            break;
        default:
            // Handle wrong number here
            break;
    }
}

这是一个(非常小的)重构步骤。我会列出你想让控制器做的事情,然后找出如何避免每个函数到两个数组的1-1映射。

希望这能给你一些意义,并给你一个方向。我脑子里有更多的想法,但我还不能把它们提出来。如果我这样做了,如果你感兴趣的话,我会添加更多(在前半打之后再编辑一两个是什么,对吧?:))。