我正在学习结构和Arraylist进行学校练习,而不是作业。我想知道在我的按钮点击事件中,在消息框中获得成绩的最佳方法是什么。如果有人能指出我正确的方向,将非常感谢,谢谢!
private ArrayList allGrades = new ArrayList();
public struct Test
{
public int score;
public string grade;
}
private void btnFindGrade_Click(object sender, EventArgs e)
{
int myGrade = Convert.ToInt32(txtScore.Text);
foreach (Test x in allGrades)
{
}
}
private void Form1_Load(object sender, EventArgs e)
{
Test t;
t.score = 299;
t.grade = "F";
allGrades.Add(t);
t.score = 349;
t.grade = "D";
allGrades.Add(t);
t.score = 399;
t.grade = "C";
allGrades.Add(t);
t.score = 449;
t.grade = "B";
allGrades.Add(t);
t.score = 500;
t.grade = "A";
allGrades.Add(t);
}
我忘了提及,对于我的应用程序,它只是一个带按钮的文本框,我输入你在我的代码中看到的分数,然后我想在一个信息框中获得用户等级。
答案 0 :(得分:0)
这里和网上有很多答案可以帮助您完成任务。首先,删除ArrayList,因为它将所有内容都放入对象中,然后您需要担心取消装箱。
使用看起来很像的列表:
var allGrades = new List<Test>()
然后只需使用linq查询:
allGrades.FirstOrDefault(x => x.grade == myGrade)
Ta-da ......完成工作
答案 1 :(得分:0)
首先,您可能想要创建Test
类的几个实例:
Test t = new Test();
t.score = 299;
t.grade = "F";
allGrades.Add(t);
t = new Test();
t.score = 349;
t.grade = "D";
allGrades.Add(t);
t = new Test();
t.score = 399;
t.grade = "C";
allGrades.Add(t);
t = new Test();
t.score = 449;
t.grade = "B";
allGrades.Add(t);
t = new Test();
t.score = 500;
t.grade = "A";
allGrades.Add(t);
或更短的版本:
allGrades.Add(new Test() {score = 299, grade = "F"});
allGrades.Add(new Test() {score = 349, grade = "D"});
allGrades.Add(new Test() {score = 399, grade = "C"});
allGrades.Add(new Test() {score = 449, grade = "B"});
allGrades.Add(new Test() {score = 500, grade = "A"});
收集完集合后,您可以找到给定成绩的第一个Test
项目:
private void btnFindGrade_Click(object sender, EventArgs e) {
int myGrade = Convert.ToInt32(txtScore.Text);
Test found = allGrades
.OfType<Test>()
.FirstOrDefault(item => item.grade == myGrade);
if (found != null) {
MessageBox.Show($"score: {found.score} grade: {found.Grade}");
}
else
MessageBox.Show($"Not found");
}