Проверьте, существует ли переменная посредством генерации имени [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Проверьте, существует ли переменная посредством генерации имени [закрыто]

Сообщение Anonymous »

Для контекста: я спрашиваю об этом в отношении видеоигры Space Engineers. В данный момент у меня нет доступа к игре, поэтому я решил использовать онлайн-переводчик, чтобы приблизить свою цель, чтобы проверить, верна ли теория.
У меня есть ряд объектов, из которых я могу собрать данные. Точное число неизвестно и может измениться во время выполнения. На объекты ссылаются по имени, и хотя имена также неизвестны, они следуют соглашению об именах, поэтому их можно вычислить. Для аппроксимации я ввел пять переменных, соответствующих шаблону именования, и присвоил им значения. Затем я использовал цикл while для увеличения отдельной переменной и подсчета количества найденных переменных. Все, что мне нужно знать, это можно ли использовать цикл while, чтобы найти, где заканчиваются имена.

Код: Выделить всё

  int i = 0;

// These represent external sources (objects). How many there are is unknown
// but  they follow this naming convention.
int ex1 = 1;
int ex2 = 2;
int ex3 = 3;
int ex5 = 4; // This is to test the script’s limits; should fail and return ‘3’
int ex6 = 5; // Next test is rename this “ex4” and rerun the script. Should count all 5

// The purpose of this function is
// to count how many sources there are.
while("ex"+(i+1)){
i++;
}

Console.WriteLine(i);
Использование интерпретатора на сайте w3schools: не запускается, ошибок нет. Я пытался создать имена переменных в переменной строкового типа, но без изменений.
Да, кроме того, большая часть моего опыта работы с C исходит от Arduino и PHP с небольшим количеством BASH, разбросанного здесь и там.
[Редактировать]
Я не знаю, что сайт имеет в виду, когда говорит, что тема требует большей ясности. Я думал, что это довольно просто: я пишу сценарий для игры, но застрял на работе и не могу опробовать код, поэтому я попытался написать приближение того, что я хочу в игре, но приближение не работает, не запускается и не возвращает ошибку (или, по крайней мере, интерпретатор, который я использовал, этого не сделал). Но если потребуется более подробная информация, я дам все, что смогу.
Ниже приведен весь фрагмент кода, написанный для игры и который можно напрямую скопировать/вставить из этого самого поста, который я пытаюсь аппроксимировать. В игре используется ограниченная копия C# версии 6 (в целях безопасности ограничено количество доступных функций).

Код: Выделить всё

 Runtime.UpdateFrequency = UpdateFrequency.Update10;
}

public void Main(){
IMyBatteryBlock battery;
float charge; // Current charge level
float totchrg = 0; // Total combined charge
float max; // Capacity
float totmax = 0; // Total capacity
float lvl; // Charge level (as a percentage)
float totlvl; // Overall charge level (as a percentage)
int cnt = 0;

while(GridTerminalSystem.GetBlockWithName(“Battery “+(cnt+1)) as ImyBatteryBlock){
battery = GridTerminalSystem.GetBlockWithName("Battery “+(cnt+1)) as ImyBatteryBlock;
cnt = cnt + 1;
charge = battery.CurrentStoredPower;
totchrg = totchrg + charge;
max = battery.MaxStoredPower;
totmax = totmax + max;
lvl = 100 * (charge / max);
Echo(lvl.ToString("0.00"));
}

totlvl = 100 * (totchrg/totmax);
Echo(cnt.ToString(“0”)+” batteries found with a charge of “+totlvl.ToString("0.00"));
}
На мой взгляд, это должно сработать. Это не совсем соответствует той структуре данных, к которой я стремлюсь, но для этого мне нужно больше узнать о манипуляциях со строками. В любом случае, хотя кажется, что это должно работать, я знаю, что разные языки имеют свои особенности, поэтому я просто пытаюсь убедиться, что в C# нет ничего странного, с чем мне пришлось бы работать (Lua дал мне ptsd).
Кто-то предложил мне использовать массивы. Как мне сделать недействительными ключи массива? Типа, приближение, которое я выложил? Как массив может иметь действительные индексы 1-3 и 5 и 6, в то время как индекс 4 сам по себе не является допустимым индексом? Это очень важно из-за того, как работает игра (если вы вставляете батарею, игра считает ее дополнительной батареей. Если вы удалите ее, она все равно будет учитываться, и новая батарея будет учитываться как добавление, а не замена, поэтому внутренний счетчик игры может легко сбиться с толку, если вы будете много переставлять).
Как кто-то другой предложил, я думаю, я мог бы использовать словарный подход и определить, я не знаю, 15 разных имен для проверки? Позже я захочу изменить сценарий, чтобы получить доступ к чему-то, что, как я знаю, будет много (места для хранения).

Подробнее здесь: https://stackoverflow.com/questions/797 ... generation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»