2012-01-19 170 views
0

嗨,我有一點關於在C#中創建唯一變量名稱的noob問題。 我想創建一個敵人對象ArrayList,我想打電話給每個敵人「敵人[1]」 我想做一個for循環,我想用「我」的值添加到單詞結尾的敵人。 所以,例如:c#唯一變量名稱

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

任何幫助,將不勝感激。

+0

什麼是你想通過這樣做是爲了達到什麼目的?有一個更好的方法來做你想做的事情? 「列表」有什麼問題? –

回答

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() }; 

然後,你可以寫你的循環並獲得通過指數

// 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(); 
} 

您對使用ArrayList想法已經過時了從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

您是否正在尋找他們的名字或只是創建ň敵人的變量?

要創建ñ變量在for循環使用數組瓦特/:

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

現在,您可以獲得1號敵人這樣

Enemy myEnemy = EnemyArray[0] 

第二個這樣的

Enemy myEnemiesEnemy = EnemyArray[1] 

等等...

1

一個構造函數添加到你的敵人類

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; } 
} 

填充敵人

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)); 
} 

你也可以使用一個對象初始化,而不是consturctor參數

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

你不能真正地做你所問的。如果你真的想用這些名字來引用對象,你可以把它們放在字典中。

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

然後你可以這樣引用它們:

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)}); 
}