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

Posted

技术标签:

【中文标题】如何检查在 C# 的全局类中找到的数组中是不是存在对象【英文标题】:how to check if an object exists in an array which is found in a global class in C#如何检查在 C# 的全局类中找到的数组中是否存在对象 【发布时间】:2011-08-05 04:14:21 【问题描述】:

我正在制作一个游戏,它有一个名为 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
    

【问题讨论】:

不清楚你想做什么。 Player1Squads 应该做什么?它会在 ply1squads 数组中创建 15 个新的 Squads 吗?还是创建 1 个小队并将其添加到阵列中?还是什么? play1squads 和 ply2squads 必须是静态的,如果您希望从静态方法访问它们。 在四种形式之一中,玩家可以用有限的资源自定义自己的小队。 15 是小队的最大数量 【参考方案1】:

试试这个:

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 映射到两个数组。

希望这有点道理,并为您指明了前进的方向。我还有一些想法在我的大脑后部发痒,但我还不能把它们拉到前面。如果我这样做了,如果您有兴趣,我会添加更多内容(前半打之后还有什么或两个编辑,对吧?:))。

【讨论】:

是的,效果很好,谢谢。这不是我想要的,因为我试图检查 Squad 对象的实例是否存在于数组中,但这要好得多,因为我只需向名为 isAlive 的 Squad 类添加一个布尔值来检查玩家是否已经组建了那个小队。再次感谢! 很高兴它有帮助。如果您愿意,请将问题标记为已回答。快乐编码! :) @zack misso - 您希望控制器执行的操作列表未显示。 nvm.... 它在第一部分给了我一个异常处理错误,但我通过取出 if (....Length == 0) 解决了它。出于某种原因,它不会创建实例,但它现在可以工作了 怎么说呢。我是这个论坛的新手,还不了解它的所有机制。

以上是关于如何检查在 C# 的全局类中找到的数组中是不是存在对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Velocity 模板语言检查数组中是不是存在值

如何检查数组的元素是不是存在于字符串中

检查随机数是不是存在于数组中

PHP如何检查一个数组内是不是存在指定元素

C# - 如何检查 C# 中是不是存在命名空间、类或方法?

如何在 C# 中的 WinRAR、7Zip、Zip、Tar、Winzip 中检查文件是不是存在