2012-01-19 9 views
0

こんにちは、私はC#で一意の変数名を作成することについてのnoobの質問が少しあります。 私はEnemyオブジェクトのArrayListを作成したいと思いますし、それぞれの敵を "enemy [1]"と呼んでいます。 forループを作成したいと思います。 "i"の値を使用して単語の敵の終わり。 などです。C#一意の変数名前

forloop 
{ 
Enemy enemy1 = new Enemy(actual parameters of the enemy class) 
Enemy enemy2 = new Enemy(); 
Enemy enemy3 = new Enemy(); 
} 

助けてください。

+0

あなたがこれを行うことによって達成するために何をしようとしている。

var enemies = new Dictionary<string, Enemy>(); for (int i = 0; i < ??? ; i++) { enemies["enemy"+i.ToString()] = new Enemy(...); } 

次に、このようにそれらを参照することができますか?あなたが望むことをするためのよりよい方法が必要ですか? 'List 'の何が間違っていますか? –

答えて

4

変数は必要に応じて動的に名前を付けることはできませんが、配列やリストを使用して変数を動的に指定することはできません(ArrayLists、以下を使用しないでください)。

List<Enemy>List<T>はSystem.Collections.Genericに発見された)

var enemies = new List<Enemy>(); 
enemies.Add(new Enemy()); // add as many as you need 

またはコレクションは、いくつかの法的があるうち、あなたが単純な配列を使用することができ、動的にサイズであることを必要としない場合を作成します。作成のための構文。

Enemy[] enemies = { new Enemy(), new Enemy(), new Enemy() }; 

次にあなたがArrayListの使用に関するあなたの考え方が古いインデックス

// enemies.Count if using List<Enemy> 
// enemies.Length if using Enemy[] array 
for (int index = 0; index < enemies.Count; index++) 
{ 
    enemies[index].FireWeapon(); 
} 

またはforeachループ

foreach (Enemy enemy in enemies) 
{ 
    enemy.FireWeapon(); 
} 

を書く経由でループとアクセスを書くことができますC#2.0以降(現在のリリースはC#4.0)、またはVisual Studio 2005(2010年は現在の市場版です)。前述のSystem.Collections.Generic名前空間にある厳密に型指定されたジェネリックコレクションを使用することができます。

+0

アドバイスをいただきありがとうございました。上記のリスト方法を使用します。 –

0

あなたがそう

List<Enemy> enemies = new List<Enemy> { 
    new Enemy(), 
    new Enemy(), 
    new Enemy() }; 

あるいは

List<Enemy> enemies = new List<Enemy>(); 
for (int i = 0; i < someNumberOfEnemiesDefinedElsewhere; i++) 
{ 
    enemies.Add(new Enemy("Enemy" + i)); 
} 

ようにそれを行うことができ、我々はより多くの細部を必要としています。

0
 List<Enemy> enemies = new List<Enemy>(); 
     for (int i = 0; i < N; i++) 
     { 
      enemies.Add(new Enemy() { Parameters... }); 
     } 

     // Access to objects by index 
     Enemy enemy2 = enemies[1]; 
0

あなたはそれらに名前を付けるか、単にn個敵の変数を作成するために探していますか? n個変数を作成するには

は、あなたのループの中に/ wの配列を使用します。

EnemyArray[*n*] 
for(int i =0; i< *n*; i++) 
{ 
    EnemyArray[i] = new Enemy() 
} 

今、あなたはこの

Enemy myEnemy = EnemyArray[0] 

のような第一の敵にこの

状の第2を得ることができます
Enemy myEnemiesEnemy = EnemyArray[1] 

など...

1

ます。またconsturctorパラメータの代わりに、オブジェクト初期化子を使用することができます

Enemy[] enemy = new Enemy[10]; 
for (int i = 0; i < enemy.Length; i++) { 
    enemy[i] = new Enemy("Foe #" + i, 100); 
} 

または

List<Enemy> enemy = new List<Enemy>(); 
for (int i = 0; i < 10; i++) { 
    enemy.Add(new Enemy("Foe #" + i, 100)); 
} 

で敵クラス

public class Enemy 
{ 
    public Enemy(string name, int score) 
    { 
     this.Name = name; 
     this.Score = score; 
    } 

    public string Name { get; set; } 
    public int Score { get; set; } 
} 

塗りつぶし敵にコンストラクタを追加

var e = new Enemy{ Name = "X", Score = 100 }; 
0

あなたが求めていることを本当に行うことはできません。それらの名前で実際にオブジェクトを参照したい場合は、それらを辞書に入れることができます。

enemies["enemy1"].FireWeapon(); 
1
List<Enemy> listOfYourEnemy = new List<Enemy>(); 
for (int i = 0; i < n; i++) 
{ 
    listOfYourEnemy.Add(new Enemy() {unqName= string.Format("enemy{0}", i)}); 
} 
関連する問題