как создать массив в конструкторе 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 шт):

Автор решения: Frehzy

Предлагаю чуть поменять реализацию.

Во первых, обратите внимание на название параметров, которые вы обозначаете в конструкторе 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();
}
→ Ссылка