Мы создаем игру Towers of Hanoi в окне консоли. Мы должны использовать словарь> для хранения игровых фигур. Я объявил это вне основного как глобальное. Когда я звоню static void function drawboard(Dictionary<char, Stack<int>>
. Независимо от того, что я пытаюсь, имя локальной переменной System.Collections.Generic.Dictionary<TKey, TValue>.this[TKey].get returned
. Когда я смотрю переменную, она отображается как $ReturnValue1
, и она перезаписывает мой оригинальный словарь. Что происходит и как мне это остановить или хотя бы обойти.
Я пытался создать клоны словаря и пропустить их через чертежную доску, но он все равно переопределяет оригинал. Я попытался изменить область словаря, и я попытался добавить модификаторы в словарь, как защищенный, частный, т. Д. Я также перепрыгнул через несколько обручей и сделал свою доску немного сложнее, чем она пытается обойти эту проблему. Я могу упростить это достаточно легко, если смогу понять суть моей проблемы.
- декларация -
static Dictionary<char, Stack<int>> towers = new Dictionary<char, Stack<int>>();
towers.Add('A', new Stack<int> { });
for (int x = 4; x > 0; x--)
{
towers['A'].Push(x);
}
towers.Add('B', new Stack<int> { });
towers.Add('C', new Stack<int> { });
--- функция рисования доски ---
static void printboard(Dictionary<char, Stack<int>> t)
{
Stack<int> A = t['A'];
Stack<int> B = t['B'];
Stack<int> C = t['C'];
for (int y = 0; y < 5; y++)
{
if (y == 4)
{
Console.Write("----------\n" +
"A B C\n");
}
else
{
if (A.Count == 0)
Console.Write("|" + " ");
else
{
Console.Write(A.Pop() + " ");
}
if (B.Count == 0)
Console.Write("|" + " ");
else
{
Console.Write(B.Pop() + " ");
}
if (C.Count == 0)
Console.Write("|" + " ");
else
{
Console.Write(C.Pop() + " ");
}
Console.Write("\n");
}
}
}
Код должен передавать словарь по значению, извлекать значения из локальной копии словаря и распечатывать их в окне консоли, не затрагивая исходный словарь Towers.