字典清单<>

吉恩101

成员
已加入
2020年2月8日
留言内容
10
编程经验
1-3
我很难在字典列表中存储多个名称和度数。

我使用菜单,这样当我单击菜单“显示所有学生”时,用户可以添加多个名称和学位,但只能将一个名称和学位保存到我的词典列表中。


屏幕截图2020-02-08,6.30.52 PM.png

屏幕截图2020-02-08,6.31.04 PM.png
屏幕截图2020-02-08,6.30.52 PM.png
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
首先,请不要发布代码图片。代码是文本。将其发布为文本,然后使用工具栏将其格式化为代码。我想告诉你错误在代码中的什么地方,但是现在我不能只复制并粘贴相关代码,因为它在图片中。至少我只需要重新输入一些代码即可。如果我们希望能够自己测试您的代码怎么办?我们必须重新输入所有内容。您不会结识很多强迫我们这样做的朋友。

无论如何,问题在于,每次您将商品添加到 字典,您创建一个新 字典 first:
C#:
_school = new Dictionary<string, List<Student>>();

//...

_school.Add(myStudent.name, new List<Student>());
这意味着,在添加每个新学生之前,您首先要丢弃所有现有学生。你只想要一个 字典, 正确的?因此,您应该只执行创建新代码的代码 字典 一次。一种选择是在创建一个对象之前测试一个对象是否存在,例如
C#:
if (_school == null)
{
    _school = new Dictionary<string, List<Student>>();
}
最明智的做法是创建简单的 字典 在其中声明变量的位置:
C#:
private Dictionary<string, List<Student>> _school = new Dictionary<string, List<Student>>();
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,604
地点
弗吉尼亚州切萨皮克
编程经验
10+
也许我错过了一些事情,为什么您要添加学生姓名作为关键字,而您所在的行上却有一个空的学生列表:
C#:
_school.Add(myStudent.name, new List<Student>());
 

吉恩101

成员
已加入
2020年2月8日
留言内容
10
编程经验
1-3
感谢您对图片的注意。我今天刚刚注册,所以我是这个网站的新手。

我希望名称是关键,程度是价值。出于某种原因,当我输入Web两次学位时,它崩溃了。
 

吉恩101

成员
已加入
2020年2月8日
留言内容
10
编程经验
1-3
也许我错过了一些事情,为什么您要添加学生姓名作为关键字,而您所在的行上却有一个空的学生列表:
C#:
_school.Add(myStudent.name, new List<Student>());


显示所有学生:


==================


==================


名字学位等级


1.吉恩·韦伯


2.最大移动


按任意键继续...

那是我的显示菜单。如果我想添加一个具有与Web相同学位的新学生,它将崩溃。
 

吉恩101

成员
已加入
2020年2月8日
留言内容
10
编程经验
1-3
C#:
private void AddStudent()
        {
            Console.Clear();
            //Setting UI color
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Add Student: ");
            Console.WriteLine("============");
            Console.WriteLine("============");
            Console.ForegroundColor = ConsoleColor.Gray;

            //Instantiation
           _school = new Dictionary<string, List<Student>>();

            Student myStudent = new Student("Jean", "Web");

            myStudent.name = Validation.ValidateString("\nPlease enter student name: ");
            _school.Add(myStudent.name, new List<Student>());

            myStudent.degree = Validation.ValidateString("Please enter student degree: ");
            _school.Add(myStudent.degree, new List<Student>());

            _school[myStudent.name].Add(myStudent);



            

            
            Console.WriteLine($"New student created {myStudent.name} {myStudent.degree}");

            Console.WriteLine("按任意键继续...");
            Console.ReadKey();
            _myMenu.Display();
            Selection();
        }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
我已经解释了为什么您的词典中只有一个学生的问题。这并不意味着代码没有其他问题。它们与您询问的问题无关。如果还有其他问题,则确实应该为它们创建新线程:每个线程一个主题,每个主题一个线程。如何正确存储学生和学位的数据是另一回事。您还应该提供一个标题,以更好地描述实际问题。
 

吉恩101

成员
已加入
2020年2月8日
留言内容
10
编程经验
1-3
我已经解释了为什么您的词典中只有一个学生的问题。这并不意味着代码没有其他问题。它们与您询问的问题无关。如果还有其他问题,则确实应该为它们创建新线程:每个线程一个主题,每个主题一个线程。如何正确存储学生和学位的数据是另一回事。您还应该提供一个标题,以更好地描述实际问题。
非常感谢你。会做。
 
最佳 底部