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

You'd be better off making an array:

var players = new Player[x];
for (int i = 0; i < x; i++)
{
    players[i] = new Player(i, x);
}

or use Linq:

var players = Enumerable.Range(0, x)
                        .Select(i => new Player(i, x))
                        .ToArray();

You can then reference the players you created with.

var player1 = players[0]; // Note: array indexes start at 0

Of course, you may not actually need to use arrays, specifically. Many other collection classes might suit your problem better.

Further reading:

于 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 に答える