0

我已经开始用 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;
    }

我只是想知道是否有更有效的方法来解决这个问题以及这些方法是什么。

4

4 回答 4

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

当然,您可能实际上并不需要特别使用数组。许多其他集合类可能更适合您的问题。

进一步阅读:

于 2013-03-29T19:58:14.803 回答
1

你可以做一个球员名单

var players = new List<Player>;

for (int i = 0; i < x; i++)
{
    players.add(new Player(i, x));
}

然后内存将在运行时分配。

我不喜欢使用数组,因为您必须提前知道它们的大小。使用列表,您可以动态分配值,并且它只会占用与列表处于当前状态一样多的内存空间。

于 2013-03-29T20:01:10.260 回答
0

我没有在 C# 中编程,但似乎您正在创建局部变量:它们仅在您的循环中有效。

在循环之外命名您的变量,然后在其中创建它们。您必须测试它们是否存在才能与它们一起工作。

于 2013-03-29T20:00:19.640 回答
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.

于 2013-03-29T23:07:52.100 回答