c # Уникальная переменная Имя - PullRequest
0 голосов
/ 20 января 2012

Привет, у меня есть небольшой вопрос о создании уникальных имен переменных в C #.Я хотел бы создать ArrayList объектов Enemy и назвать каждого врага «врагом» [1]. Я хотел бы создать цикл for и использовать значение «i» для добавления в конецслово враг.так, например:

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

Любая помощь будет оценена.

Ответы [ 7 ]

4 голосов
/ 20 января 2012

Переменные не могут быть динамически названы по вашему желанию, но используя массивы или списки (но не используйте 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() };

Затем вы можете написать свой цикл и получить доступ через index

// 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 голос
/ 20 января 2012
 List<Enemy> listOfYourEnemy = new List<Enemy>();
 for (int i = 0; i < n; i++)
 {
     listOfYourEnemy.Add(new Enemy() {unqName= string.Format("enemy{0}", i)}); 
 }
1 голос
/ 20 января 2012

Добавление конструктора к классу врага

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 };
0 голосов
/ 20 января 2012

Вы не можете делать то, что просите. Если вы действительно хотите ссылаться на объекты по этим именам, вы можете поместить их в словарь.

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

Тогда вы можете ссылаться на них так:

enemies["enemy1"].FireWeapon();
0 голосов
/ 20 января 2012

Вы хотите назвать их или просто создать n вражеские переменные?

Для создания n переменных используйте массив с / в цикле for:

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

Теперь вы можете получить 1-го врага вот так

Enemy myEnemy = EnemyArray[0]

Второй, как это

 Enemy myEnemiesEnemy = EnemyArray[1]

И так далее ...

0 голосов
/ 20 января 2012
        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 голосов
/ 20 января 2012

вы можете сделать это как

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

в противном случае, нам нужно больше деталей.

...