在C#

时间:2016-03-19 05:06:27

标签: c#

我是C#的新手,我从Javascript开始,所以理解C#的行为有点困难。

我正在尝试在for循环中创建一个简单的对象然后显示指定的值,但是这有一个范围问题,并且我不知道如何在for循环之外访问它?

这是我的代码设置:

public class Player{
    public int identity;
    public int score;

    public Player(int id){
        identity = id;
        score    = 0;
    }
}
for (int i = 0; i < max; i++){
        Player player = new Player(i);
}

//here i want to access a player and print the information for said player

我不知道如何在循环之外访问新创建的玩家,这是怎么做到的?

2 个答案:

答案 0 :(得分:3)

我可以理解这是如何混淆来自JavaScript,在JavaScript中所有变量都被提升到函数(或全局)范围。在C#中不是这样,C#变量通常在最近的{} s范围内。但可以在儿童范围内使用。

所以你可以像这样写代码:

List<Player> players = new List<Player>();
Player player = null;
for (int i = 0; i < max; i++){
        player = new Player(i);
        players.Add(player);
}
Console.WriteLine(players[x]);

在此示例中,您可以访问player之外的每个foreach,因为它是在更高的范围内声明的。但这样写得更恰当:

List<Player> players = new List<Player>();
for (int i = 0; i < max; i++){
        Player player = new Player(i);
        players.Add(player);
}
Console.WriteLine(players[x]);

通常认为将变量声明为尽可能接近其使用范围是一种好习惯。

您自己建议的最终优化是完全消除player声明(因为它是不必要的)并内联它。这给我们留下了最终版本:

List<Player> players = new List<Player>();
for (int i = 0; i < max; i++){
        players.Add(new Player(i));
}
Console.WriteLine(players[x]);

答案 1 :(得分:2)

你可以尝试这样的事情

Player player = new Player();
List<Player> playerlist = new List<Player>();

for (int i = 0; i < max; i++){
      player   = new Player(i);
      playerlist.Add(player);
}