#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}" );
}