繁体   English   中英

c#唯一变量名称

[英]c# Unique variable Name

嗨,我有一个关于在C#中创建唯一变量名的菜鸟问题。 我想创建一个ArrayList of Enemy对象,我想将每个敌人称为“ enemy [1]”,我想创建一个for循环,并且我想使用“ i”的值添加到敌人一词。 因此,例如:

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

任何帮助,将不胜感激。

变量不能根据需要动态命名,但是可以使用数组或列表(但是请不要在下面使用ArrayLists !),您可以通过索引进行访问。

创建一个List<Enemy> (在System.Collections.Generic中找到List<T>

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

从C#2.0+(市场上的当前版本为C#4.0)或Visual Studio 2005(当前的市场版本)开始,有关使用ArrayList想法已过时。 最好使用前面提到的System.Collections.Generic命名空间中的强类型泛型集合。

将构造函数添加到敌人的类中

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

您还可以使用对象初始化程序而不是构造函数参数

var e = new Enemy{ Name = "X", Score = 100 };
 List<Enemy> listOfYourEnemy = new List<Enemy>();
 for (int i = 0; i < n; i++)
 {
     listOfYourEnemy.Add(new Enemy() {unqName= string.Format("enemy{0}", i)}); 
 }

你可以做到

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

否则,我们需要更多详细信息。

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

您是要命名它们还是仅创建n个敌方变量?

要创建n个变量,请在for循环中使用数组w:

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

现在您可以像这样获得第一敌人

Enemy myEnemy = EnemyArray[0]

第二个像这样

 Enemy myEnemiesEnemy = EnemyArray[1]

等等...

您不能真正做到您所要的。 如果您真的想通过这些名称引用对象,则可以将它们放入字典中。

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

然后,您可以像这样引用它们:

enemies["enemy1"].FireWeapon();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM