C# 数组对象帮助!将学生姓名与考试姓名进行比较,并分配分数

C# 数组对象帮助!将学生姓名与考试姓名进行比较,并分配分数,c#,arrays,object,search,match,C#,Arrays,Object,Search,Match,为了学习,我最近一直在四处游荡,想就我最近搞砸的一个项目寻求一些帮助。在这个项目中,我有学生和测试。每个学生都有一个测试,我需要把两者匹配起来。我原以为我可以创建一个学生数组,然后在数组中进行测试,直到找到匹配项,但我真的很困惑我该怎么做 本程序的目的是将学生的测试名和学生名进行匹配。然后取测试分数的值并应用于学生的分数。 例如student1.score=test1.scoreOftest using System.IO; using System; class Program {

为了学习,我最近一直在四处游荡,想就我最近搞砸的一个项目寻求一些帮助。在这个项目中,我有学生和测试。每个学生都有一个测试,我需要把两者匹配起来。我原以为我可以创建一个学生数组,然后在数组中进行测试,直到找到匹配项,但我真的很困惑我该怎么做

本程序的目的是将学生的测试名和学生名进行匹配。然后取测试分数的值并应用于学生的分数。 例如student1.score=test1.scoreOftest

using System.IO;
using System;

class Program
{
    static void Main ()
    {
下面我为我的学生和测试类创建对象

        Student student1 = new Student("Finn",0);
        Test test1 = new Test("Finn",100);

        Student student2 = new Student("AJ",0);
        Test test2 = new Test("AJ",97);

        Student student3 = new Student("Sami",0);
        Test test3 = new Test("Sami",80);

        Student student4 = new Student("John",0);
        Test test4 = new Test("John",72);

        Student student5 = new Student("Rey",0);
        Test test5 = new Test("Rey",61);
此字符串的目的是保存测试中的名称(在本例中为“Finn”),并将其与学生的名称匹配。此外,我还创建了一个学生数组,用于发送测试

string nameOnTest = test1.nameOfStudent;

        object[] arrayOfStudents = {student1, student2, student3, student4, student5};
我想如果我可以创建一个currentIndex,我可以按照if(currentIndex[I.name]==nameOnTest)的思路做一些事情,然后分配分数并停止循环

    for(int i = 0; i < arrayOfStudents.Length;i++){
        int currentIndex = i;
        if(currentIndex[object.name] == nameOnTest){
           //then do something similar to
         //  object.score = scoreOfTest   }
       }
    }
}

public class Test {

    public string nameOfStudent;
    public int scoreOfTest;

    public Test(string nameOfStudent, int scoreOfTest){

        this.nameOfStudent = nameOfStudent;
        this.scoreOfTest = scoreOfTest;

    }
}

public class Student {

  public  string name;
  public  int score;

    public Student(string name, int score){

        this.name = name;
        this.score = score;

    }
}
for(int i=0;i
任何指导都将不胜感激。谢谢

if(currentIndex[object] == Student)
正确的

if(object[currentIndex] == Student)

学生是谁?在“==Student”中,如果您只声明了class,那么它将等于上次声明的Student。

为什么不使用LINQ对名称执行联接操作呢。类似于:

Join(测试,x=>x.Name,y=>y.Name,(x,y)=>new{Student=x,Test=y})


如果您想将某个学生的所有测试分组,请选择GroupJoin。

您可以使用Linq简化代码

using System.Linq;
...
...
static void Main(string[] args)
{
    List<Student> students = new List<Student>()
                                 {
                                     new Student("Finn", 0),
                                     new Student("AJ", 0),
                                     new Student("Sami", 0),
                                     new Student("John", 0),
                                     new Student("Rey", 0)
                                 };

    List<Test> tests = new List<Test>()
                                 {
                                     new Test("Finn", 100),
                                     new Test("AJ", 97),
                                     new Test("Sami", 80),
                                     new Test("John", 72),
                                     new Test("Rey", 61)
                                 };

    tests.ForEach(
        t =>
            { students.Where(s => s.name == t.nameOfStudent).FirstOrDefault().score = t.scoreOfTest; });
}
使用System.Linq;
...
...
静态void Main(字符串[]参数)
{
学生名单=新名单()
{
新生(“芬兰人”,0),
新生(“AJ”,0),
新生(“萨米”,0),
新生(“约翰”,0),
新生(“Rey”,0)
};
列表测试=新列表()
{
新测试(“Finn”,100),
新试验(“AJ”,97),
新测试(“Sami”,80),
新测试(“约翰”,72岁),
新测试(“Rey”,61岁)
};
弗雷奇酒店(
t=>
{students.Where(s=>s.name==t.nameOfStudent.FirstOrDefault().score=t.scoreOfTest;});
}

现在,“学生”集合中的每个学生都应该应用相应的考试分数。

这将起作用。但是使用Linq会更好

        string nameOnTest = test1.nameOfStudent;
        Student[] arrayOfStudents = { student1, student2, student3, student4, student5 };
        for (int i = 0; i < arrayOfStudents.Length; i++)
        {
            int currentIndex = i;
            if (arrayOfStudents[i].name == nameOnTest)
            {
                arrayOfStudents[i].score = test1.scoreOfTest; 
            }
        }
string nameoftest=test1.nameoftstudent;
学生[]排列学生={student1,student2,student3,student4,student5};
for(int i=0;i
如果我理解了你的问题,那么我认为你需要将学生从
学生班
测试班
的相应分数进行匹配

您可以使用
Linq查询表达式
(C#3.0)。它为您提供了很大的灵活性,并且易于阅读

            List<Student> StudentsList = new List<Student>()
            {
                 new Student("Finn", 0),
                                 new Student("AJ", 0),
                                 new Student("Sami", 0),
                                 new Student("John", 0),
                                 new Student("Rey", 0)
            };

            List<Test> TestList = new List<Test>()
                             {
                                 new Test("Finn", 100),
                                 new Test("AJ", 97),
                                 new Test("Sami", 80),
                                 new Test("John", 72),
                                 new Test("Rey", 61)
                             };

            var results = from s in StudentsList
                          join t in TestList
                              on s.name equals t.nameOfStudent
                          orderby s.name
                          select new { Name = s.name, Score = t.scoreOfTest, };

            foreach (var v in results)
            {
                Console.WriteLine("Student ={0} has  Score={1}",
                v.Name, v.Score);
            }
List StudentsList=new List()
{
新生(“芬兰人”,0),
新生(“AJ”,0),
新生(“萨米”,0),
新生(“约翰”,0),
新生(“Rey”,0)
};
List TestList=新列表()
{
新测试(“Finn”,100),
新试验(“AJ”,97),
新测试(“Sami”,80),
新测试(“约翰”,72岁),
新测试(“Rey”,61岁)
};
var结果=来自学生列表中的s
在测试列表中加入t
s.name等于t.nameOfStudent
orderby s.name
选择新的{Name=s.Name,Score=t.scoreOfTest,};
foreach(结果中的var v)
{
WriteLine(“学生={0}的分数={1}”,
v、 姓名(v.Score);
}

它连接到
Name
,实际上不推荐使用,但这是示例中两个类之间唯一的共同点。

您可以研究使用字典,在字典中可以将学生对象映射到每个学生测试,如果您想要示例,请告诉我您对问题的解释不清楚。。。请把你真正想做的事情。。。比如“比较学生名和考试名”?请给出正确的描述。请查看下面我的解决方案:[[1]:谢谢您的帮助!