我是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
我不知道如何在循环之外访问新创建的播放器,这是怎么做到的?
我可以理解这如何使来自JavaScript的混乱,在JavaScript中,所有变量都被提升到函数(或全局)范围内。 在 C# 中并非如此,在 C# 中,变量的作用域通常在最接近的 {}
范围内。 但可在子作用域内使用。
所以你可以像这样编写代码:
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]);
在此示例中,你将有权访问foreach
之外的每个单独的player
,因为它是在更高的范围内声明的。但这写得更合适:
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]);
你可以尝试这样的东西
Player player = new Player();
List<Player> playerlist = new List<Player>();
for (int i = 0; i < max; i++){
player = new Player(i);
playerlist.Add(player);
}