2012-01-19 171 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)}); 
}