Как создать массивы с разными именами в C #? - PullRequest
0 голосов
/ 06 февраля 2019

В настоящее время я работаю над игрой (консольным приложением) с 25 чанками размером 5x5.Все Чанки находятся в Списке (5x5), уровень в конце.Я не хочу объявлять все массивы.Я хотел бы написать метод, в котором массивы будут объявлены, но с изменением имен.Например:- ac_Array_1- ac_Array_2

    static void Level()
    {
        List<char[,]> ol_Level = new List<char[,]>();

    }
    static void Spielblock()
    {
        int i_Stelle = 1;
        string s_ArrayName = "ac_Chunk_" + i_Stelle;
        i_Stelle++;
        char[,] /*NAME*/ = new char[5, 5];
    }

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Иметь динамическое имя переменной, которое вы запрашиваете, непросто.

Как правило, имена переменных известны во время компиляции, и компилятор может оптимизировать их, используя эту информацию.То, что вы запрашиваете, предотвратит это.

Итак, предложения, которые вы видите: создайте переменную, например словарь, известную при компиляции и написании кода.Сделайте эту переменную, которая может динамически расширяться, чтобы содержать столько «кусков», сколько вы хотите.И с Dictionary<string, char[,]> вы даже можете дать каждому из этих кусков имя.Они не будут отдельными именами переменных, но позволят вам обращаться к ним по строке / имени и выполнять итерацию по коллекции разными способами.

Чтобы добавить подробности к ответу Джонни, в любой момент вы можете использовать

var ac_chunk = ol_Level["ac_Chunk_1"];

, если вы хотите повторно получить доступ к отдельному фрагменту.

Или, что еще проще, просто продолжайте использовать ol_Level[$"ac_Chunk_{chunkNumber}"]

0 голосов
/ 06 февраля 2019

Попробуйте что-то вроде этого:

int numOfLevels = 5;

Dictionary<string, char[,]> ol_Level = Enumerable
    .Range(1, numOfLevels)
    .ToDictionary(k => $"ac_Chunk_{k}", v => new char[5,5]);

ac_Chunk = ol_Level["ac_Chunk_1"];//char[5,5]

for (int i_Row = 0; i_Row < ac_Chunk.getLength(0); i_Row++) 
{ 
    for (int i_column = 0; i_column < ac_Chunk.getLength(1); i_column++) 
    { 
        ac_Chunk[i_Row, i_column] = '#'; 
    } 
} 

...

уровней:

ac_Chunk_1, ac_Chunk_2, ac_Chunk_3, ac_Chunk_4, ac_Chunk_5

nb с использованием System.Linq и c # 6.0 $ интерполяция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...