Изменение значения ключа в словаре типа ключа строка и значение List of int - PullRequest
1 голос
/ 24 апреля 2020

У меня есть Dictionary типа ключа string и значение List<int>, и мне нужно изменить значение ключа string при сохранении значений List<int>.

static void ChangeName(Dictionary<string, List<int>> studentGrades)
{
    Console.WriteLine("Please enter the student whose name you wish to change.");
    string input = Console.ReadLine();
    if (studentGrades.ContainsKey(input))
    {
        Console.WriteLine("What would you like to change " + input + " to?");
        string newname = Console.ReadLine();
        studentGrades[input] = newname;
    }
}

Я знаю, что выполнение studentGrades[input] = newname; не работает, поскольку оно пытается изменить значение List<int>. Я также не уверен, возможно ли изменение значения ключа, каковы некоторые возможные обходные пути? Я получаю ошибку CS0029 в Visual Studio.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Вы можете удалить запись со старым ключом (input), а затем добавить запись с новым ключом (newname):

string input = Console.ReadLine();

if (studentGrades.ContainsKey(input))
{
    string newname = Console.ReadLine();

    List<int> grades = studentGrades[input];
    studentGrades.Remove(input);        // Remove an entry with old key.
    studentGrades.Add(newname, grades); // Add an entry with new key.
}
2 голосов
/ 24 апреля 2020

Ключ словаря нельзя изменить

Но вы можете решить эту проблему другим способом.

  • Вы проверяете, есть ли в словаре ваш Ввод, если он имеет ключ, вы дадите ему новое имя, но значение останется прежним. Таким образом, с помощью метода TryGetValue сначала получите фактическое значение.

  • Затем вам придется удалить старый ключ и добавить ключ с newName, который вы предоставите как input.

Просто добавьте приведенный ниже фрагмент в ваш ContainsKey блок

    studentGrades.TryGetValue(input, out var valToUpdate);
    studentGrades.Remove(input);
    studentGrades.Add(newName,valToUpdate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...