C# structures/classes/lists 索引

C# structures/classes/lists index

我目前正在学习 C#,我被要求在 C 上制作一个游戏,比如 monopoly,在 C# 上制作另一个版本。但是在 C# 上有一些我不太理解的东西,主要是因为它是一种面向对象的语言。所以问题是,为了管理玩家,我在 C 版本上创建了一个结构。

typedef struct regist
{
int number;
char name[50];
int money;
int position;
int inGame;
} Player;

Player players[8];

并获取我刚刚执行的结构的任何数据:

players[5].name = "Joe";

现在,我的 C# 问题是我设法创建了 "struct"。首先我创建了一个结构。然后我试着用一个结构列表来制作它。然后我决定为每个玩家创建一个 class 的新实例。有人告诉我这是最好的方法,所以我就这么做了。所以我的播放器上有 class:

public class Players
{
 int number;
 string name;
 int money;
 int position;
 bool inGame;
 }

在我的表格 1 上:

private void newGameButton_Click(object sender, EventArgs e) { 设置名称(); 获取名称(); }

    public void setNames()
    {
        Players player1 = new Players();
        player1.name= textBox1.Text;
        Players player2 = new Players();
        player2.name = textBox2.Text;
        Players player3 = new Players();
        player3.name = textBox3.Text;
        Players player4 = new Players();
        player4.name = textBox4.Text;
    }

现在我不知道该怎么做:

    public string getNames(){
        return Players[2].name;
    }

我怎样才能做到这一点?我也尝试过使用列表,但它不会让我按照我想要的方式来做,而且,我希望能够在其他 classes 中使用相同的实例,我希望这是可能的...... 谢谢。

一旦你有了 List<Players>,你需要实际将你的实例添加到 list.Then 你可以按预期索引:

private List<Players> allPlayers = new List<Players>();

public void setNames()
{
    Players player1 = new Players();
    player1.name= textBox1.Text;
    Players player2 = new Players();
    player2.name = textBox2.Text;
    Players player3 = new Players();
    player3.name = textBox3.Text;
    Players player4 = new Players();
    player4.name = textBox4.Text;

    allPlayers.Add(player1);
    allPlayers.Add(player2);
    allPlayers.Add(player3);
    allPlayers.Add(player4);
}

现在您可以在您的其他代码中将其作为 allPlayers[2] 或任何其他索引访问。

样式说明,您的 class 应该命名为 Player 而不是 PlayersPlayer 是一个对象,Players 表示 属性 个 Player 个对象的集合。

创建时class 使用属性

public class Players
{
    public int number{get;set;}
    public string name{get;set;}
    public int money{get;set;}
    public int position { get; set; }
    public bool inGame { get; set; }

    public string getNames(){
    return name;
    }
}

并在创建其对象时

public  Players[] p = new Players[5];

可以完成作业

p[0].name = textBox1.Text;
p[1].name = textBox2.Text;
p[2].name = textBox3.Text;
p[3].name = textBox4.Text;
p[4].name = textBox5.Text;

现在,如果可以从任何地方访问对象 p,那么您肯定可以

 p[2].getNames();

这样做。

使用列表

List<Players> pList = new List<Players>();
Players p1 = new Players();
p1.name="abc";
pList.add(p1);
Players p2 = new Players();
p2.name="xyz";
pList.add(p2);

如果 pList 可访问,则再次

public string getNames(){
return pList[0].name;
}