Как мне назначить объект в одном списке в качестве ссылки в другом списке?

#c# #list

#c# #Список

Вопрос:

У меня есть три разных списка, включая students , courses и grades . Что я хочу сделать, так это использовать некоторые из courses и students свойств в grades переменной. Вот мой код:

 namespace educationsystem
{
   public class student 
   {
            public int scode { get; set; }
            public string name { get;set;}
            public string lastname {get;set;}
            public long phone {get;set;}
   }
   public class course
   {
            public int code { get; set;}
            public string name { set; get;}
            public int unit { set; get;}

   }
   public class grade
   {
       public student studentinfo { get; set; }
       public course courseinfo { get; set; }
       public double value { get; set; }
       public int term { get; set; }
   }

   public class education
   {


   }
class Program
{

    static void Main(string[] args)
    {

        List<student> Students = new List<student>();
        List<course> courses = new List<course>();
        List<int> grades = new List<int>();
        Students.Add(new student { scode=1,name = "mahta", lastname = "sahabi", phone = 3244 });
        Students.Add(new student { scode=2, name = "niki", lastname = "fard", phone = 5411 });
        Students.Add(new student { scode=3, name = "hana", lastname = "alipoor", phone = 6121 });
        courses.Add(new course { code = 1, name = "Mathemathics", unit = 3 });
        courses.Add(new course { code = 2, name = "physics", unit = 3 });
        courses.Add(new course { code = 3, name = "computer", unit = 3 });

        Students.ForEach((student) => { Console.WriteLine(student.scode " " student.name   " "   student.lastname   " "   student.phone); });
        courses.ForEach((course) => { Console.WriteLine(course.code   " "   course.name   " "   course.unit); });

        Console.ReadKey();
 }
  

Я хотел бы напечатать оценки, подобные:

Математика Махты Сахаби 20.

Как я могу это сделать?

Комментарии:

1. Вы делали это с курсами и студентами, разницы нет. Чтобы получить доступ к названию курса, просто используйте grade.courseinfo.name

2. Если вы хотите в той же строке, просто измените строку записи на Write

3. Я не понимаю, о чем вы на самом деле спрашиваете здесь…

4. Вам нужно создать несколько grade объектов. Затем вы можете выполнить итерацию по списку созданных вами объектов класса и напечатать строки, подобные примеру, которым вы поделились. Нет необходимости создавать и печатать списки Students и courses .

5. name является String и studentinfo является student . Вероятно, вам следует переосмыслить структуру этих классов и то, как вы планируете их использовать, вместо того, чтобы собирать воедино и разбивать свойства для заполнения других. Кроме того, просто дружеский совет, вам, вероятно, следует использовать ваши переменные, чтобы они были более удобочитаемыми. Например lastname -> lastName или LastName

Ответ №1:

Чтобы жестко задать оценку и распечатать ее, вы можете использовать:

 List<grade> grades = new List<grade>(); // instead of List<int>

// ...

grades.Add(new grade 
{ 
    studentinfo = Students.Where(s => s.scode == 1).First(),
    courseinfo = courses.Where(c => c.code == 1).First(),
    value = 20.0d,
    term = 1
});

// ...

grades.ForEach((grade) => { Console.WriteLine(grade.studentinfo.name   " "   grade.studentinfo.lastname   " "   grade.courseinfo.name   " "   grade.value); });
  

Это то, что вы искали?

Ответ №2:

Вам нужно будет связать соответствующие students и courses при создании grades коллекции. Затем вы сможете получить доступ к ассоциации, перейдя по ней

 grade.studentinfo.name
  

и

 grade.courseinfo.name
  

Поскольку между учащимися и курсами, вероятно, будет много : много отношений, как насчет инициализации ваших объектов через Dictionary , чтобы упростить идентификацию каждого учащегося и курса при определении ассоциаций для оценки:

 var students = new [] 
{
    new student { scode=1,name = "mahta", lastname = "sahabi", phone = 3244 },
    new student { scode=2, name = "niki", lastname = "fard", phone = 5411 },
    ... etc
}.ToDictionary(s => s.scode);

var courses = new [] 
{
    new course { code = 1, name = "Mathemathics", unit = 3 },
    ....
}.ToDictionary(c => c.code);

var grades = new [] 
{
    new grade { term = 1, value = 53, student = students[1], course = courses[2] },
    new grade { term = 2, value = 99, student = students[1], course = courses[1] },
...
}
  

Затем вы сможете распечатать их следующим образом:

 foreach(var grade in grades)
{
   Console.WriteLine($"{grade.studentinfo.name} {grade.courseinfo.name} {grade.value}" );
}