как создать массив в конструкторе c#
namespace ConsoleApp4
{
struct Student
{
public string name; // поле имя
public string _name; // поле фамилия
public int group; // поле номера группы
public int [] rating; //поле оценки (массив из 5 элементов)
public Student(string n, string _n, int g) // конструктор с параметрами
{
rating = new int [0];
this.name = n;
this._name = _n;
this.group = g;
}
public void Print() // метод вывода информации на консоль
{
Console.WriteLine($"Студент: {name} {_name} | Группа № {group} | ");
}
}
internal class Program
{
static void Main(string[] args)
{
Student[] _s = new Student[10];
_s[0] = new Student("Светлана","Добрыйвечер", 101);
_s[1] = new Student("", "", 001);
_s[2] = new Student("", "", 001);
_s[3] = new Student("", "", 001);
_s[4] = new Student("", "", 001);
_s[5] = new Student("", "", 001);
_s[6] = new Student("", "", 001);
_s[7] = new Student("", "", 001);
_s[8] = new Student("", "", 001);
_s[9] = new Student("", "", 001);
for (int i = 0; i < _s.Length; i++)
{
_s[i].Print();
}
}
}
}
создал структуру Student.
в ней создал поля.
создал конструктор, указал параметры.
как мне поле rating (массив из 5 элементов) передать в параметр конструктора, чтобы я смог с ним работать в дальнейшем в Main.
то есть, по ТЗ мне нужно, чтобы у меня было 2 массива. Один массив из 10 студентов + в этот массив нужно добавить еще один массив rating из 5 элементов.
public Student(string n, string _n, int g, * массив rating*)
{
rating = new int [0]; // ???
this.name = n;
this._name = _n;
this.group = g;
}
как указать в параметре конструктора массив, чтобы я в методе Main: вот в этой строчке получил вот это:
_s[0] = new Student("Светлана","Добрыйвечер", 101 + * добавил вот тут данные, которые представляют из себя массив*);
Ответы (1 шт):
Предлагаю чуть поменять реализацию.
Во первых, обратите внимание на название параметров, которые вы обозначаете в конструкторе Student. WTF?!? Почему не потратить немного время на говорящие названия.
Во вторых, почему именно через массив? Реализация через List гораздо проще и удобнее.
Предлагаю следующее, класс Student будет иметь 2 конструктора. Один с Guid группы, другой без.
Пример Guid-ов:
- 1 группа 14f713e2-1223-4471-a224-bd56cadfd032
- 2 группа 565f6b86-40d8-4420-9f54-7a1183f11987
- 3 группа e03a55a5-174b-4105-aecb-aa6c19db6353
Именно этот Guid мы будем передавать в качестве параметра, если он есть. Можем так же создать словарь, в котором будем хранить словарь с информацией о группе.
Итак, реализация класса:
internal class Student
{
public Guid Group { get; }
public string Name { get; }
public string Surname { get; }
public Student(string name, string surname)
{
Group = Guid.NewGuid();
Name = name;
Surname = surname;
}
public Student(Guid group, string name, string surname)
{
Group = group;
Name = name;
Surname = surname;
}
}
Всё взаимодействие с листом вынести в отдельный статический класс Helper (над названием нужно поработать и придумать более подходящее):
internal static class Helper
{
private static readonly List<Student> _students = new();
public static Student CreateStudent(string name, string surname, Guid group = default) =>
group == default ? new Student(name, surname) : new Student(group, name, surname);
public static void AddStudent(Student student) =>
_students.Add(student);
public static void AddStudents(IEnumerable<Student> students) =>
_students.AddRange(students);
public static IEnumerable<Student> GetStudentsByGroupId(Guid group) =>
_students.Where(x => x.Group.Equals(group));
public static IEnumerable<Student> GetStudentsByName(string name) =>
_students.Where(x => x.Name.Equals(name));
public static IEnumerable<Student> GetAllStudents() => _students;
}
По аналогии, класс Helper можно доработать.
Таким образом, взаимодействие будет выглядеть следующим образом:
static void Main(string[] args)
{
Guid developer = Guid.NewGuid();
Guid analyst = Guid.NewGuid();
Dictionary<Guid, string> group = new();
group.Add(developer, "Программисты");
group.Add(analyst, "Аналитики");
var student1 = Helper.CreateStudent("Александр", "Пушкин", group.Keys.First(x => x.Equals(developer)));
var student2 = Helper.CreateStudent("Алексей", "Понамарёв", group.Keys.First(x => x.Equals(analyst)));
Helper.AddStudents(new List<Student>() { student1, student2 });
var groupDeveloper = Helper.GetStudentsByGroupId(developer);
foreach (var student in groupDeveloper)
{
var properties = student.GetType().GetProperties();
var resultString = string.Join(Environment.NewLine, properties.Select(x => $"{x.Name}: {x.GetValue(student, null)}"));
Console.WriteLine(resultString);
}
Console.ReadKey();
}