如何检查在 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
做同样的事情。
顺便说一句,您还需要将ply1Squads
和ply2Squads
声明为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# 的全局类中找到的数组中是不是存在对象的主要内容,如果未能解决你的问题,请参考以下文章