您好,我有一些关于在C#中创建唯一变量名称的noob问题。 我想制作一个敌人对象的ArrayList,我想把每个敌人称为“敌人[1]” 我想做一个for循环,我想使用“i”的值来添加到敌人这个词的末尾。 例如:
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命名空间中的强类型泛型集合。
答案 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 };
答案 2 :(得分:1)
List<Enemy> listOfYourEnemy = new List<Enemy>();
for (int i = 0; i < n; i++)
{
listOfYourEnemy.Add(new Enemy() {unqName= string.Format("enemy{0}", i)});
}
答案 3 :(得分: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 ) );
}
否则,我们需要更多细节。
答案 4 :(得分: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];
答案 5 :(得分:0)
您是否想要命名它们或只是创建 n 敌人变量?
要创建 n 变量,请在for循环中使用数组:
EnemyArray[*n*]
for(int i =0; i< *n*; i++)
{
EnemyArray[i] = new Enemy()
}
现在你可以像这样得到第一个敌人
Enemy myEnemy = EnemyArray[0]
第二个像这样
Enemy myEnemiesEnemy = EnemyArray[1]
等等......
答案 6 :(得分:0)
你无法真正做到你所要求的。如果你真的想用这些名字引用这些对象,你可以将它们放在字典中。
var enemies = new Dictionary<string, Enemy>();
for (int i = 0; i < ??? ; i++)
{
enemies["enemy"+i.ToString()] = new Enemy(...);
}
然后你可以像这样引用它们:
enemies["enemy1"].FireWeapon();