我已经开始使用C#进行编程来开发一些控制台应用程序,我想知道如何以更有效的方式使用不同的名称创建一定数量的变量。现在我正在做这样的事情:
for(int i=1; i<=x; i++)
switch(i) {
case 1:
Player player1=new Player(i, x);
break;
case 2:
Player player2=new Player(i, x);
break;
case 3:
Player player3=new Player(i, x);
break;
case 4:
Player player4=new Player(i, x);
break;
case 5:
Player player5=new Player(i, x);
break;
case 6:
Player player6=new Player(i, x);
break;
}
我只是想知道是否有更有效的方法来解决这个问题以及这些方法是什么。
答案 0 :(得分:7)
你最好制作一个阵列:
var players = new Player[x];
for (int i = 0; i < x; i++)
{
players[i] = new Player(i, x);
}
或使用Linq:
var players = Enumerable.Range(0, x)
.Select(i => new Player(i, x))
.ToArray();
然后,您可以引用您创建的玩家。
var player1 = players[0]; // Note: array indexes start at 0
当然,您可能实际上并不需要使用数组。许多其他集合类可能更适合您的问题。
进一步阅读:
答案 1 :(得分:1)
你可以制作一个球员名单
var players = new List<Player>;
for (int i = 0; i < x; i++)
{
players.add(new Player(i, x));
}
然后内存将在运行时分发。
我不想使用数组,因为你必须事先知道它们的大小。使用列表,您可以动态分配值,并且只会占用内存中的空间,因为列表处于当前状态。
答案 2 :(得分:0)
我不用C#编程,但似乎你正在创建局部变量:它们仅在你的循环中有效。
将变量命名为循环外部,然后在其中创建它们。您将不得不测试它们是否存在以便与它们一起使用。
答案 3 :(得分:0)
只是为了一招:
partial class Player {
public Player(int i, int x) {
this.Ordinal=i;
}
public int Ordinal {
get;
set;
}
public static int Total {
get;
set;
}
public delegate Trick Trick(out Player x);
public static Trick Create(out Player x) {
x=new Player(++Player.Total, 0); // the second int doesn't matter
return Create;
}
}
partial class TestClass {
public static void TestMethod() {
Player mom, dad, brother, sister, me;
Player.Create(out mom)(out dad)(out brother)(out sister)(out me);
}
}
一旦您拥有多个Total
系列,您可能需要定义另一种方法来实施Player
。