2016-09-24 5 views
0

Существует метод для чтения данных из файлаИнициализация массива в классе C#

 public static void ReadData(out StudentMarks[] Students, out int amount) 
    { 
     amount = 0; 
     Students = new StudentMarks[Max]; 
     using (StreamReader reader = new StreamReader("C:\\Users\\Andrius\\Desktop\\Mokslams\\C#\\Pratybos\\P3\\P3.2\\StudentsMarks.csv")) 
     { 
      reader.ReadLine(); reader.ReadLine(); 
      string line = null; 
      int[] marks; 
      marks = new int[Max]; 
      while (null != (line = reader.ReadLine())) 
      { 
       string[] values = line.Split(','); 
       string surname = values[0]; 
       string name = values[1]; 
       string group = values[2]; 
       int amountOfMarks = int.Parse(values[3]); 
       int i = 0; int yMax = 3 + amountOfMarks;int yMin = 4; 
       while (amountOfMarks >= i)   
       { 
        if (yMin <= yMax) 
        { 
         marks[i] = int.Parse(values[yMin]); 
         yMin++; 
        } 
        i++; 
       } 
      StudentMarks MarksObj = new StudentMarks(surname, name, group, amountOfMarks, marks); 
      Students[amount++] = MarksObj; 
      } 
     } 
    } 

Существует класс:

class StudentMarks 
{ 
    public const int Max = 50; 
    public string Surname { get; set; } 
    public string Name { get; set; } 
    public string Group { get; set; } 
    public int AmountOfMarks { get; set; } 
    public int[] Marks { get; set; } 

    public StudentMarks(string surname, string name, string group, int amountOfMarks, int[] marks) 
    { 
     Surname = surname; 
     Name = name; 
     Group = group; 
     AmountOfMarks = amountOfMarks; 
     Marks = marks; 
    } 
} 

Дело в том, что я не могу читать «Знаки», потому что я не знать, как инициализировать массив в классе. Мой метод должен работать нормально, я просто не могу поставить marks[i] в Students[i].Marks[y]

+2

Массивы довольно болезненны для изменения размера, как об использовании «Список ». Затем просто вниз 'marks.Add (int.Parse (yValues ​​[yMin])). Если вам действительно понадобится это как массив после этого, вы можете использовать Linq и do 'marks.ToArray()' –

+3

не уверены, что я понимаю вашу проблему, но я вижу что-то пахнущее в ваших оценках Student ctor: вам нужны как «amountOfMarks», так и массив «отметки». В C# массив всегда несет свой размер: вы можете использовать myArray.Length, чтобы узнать, сколько элементов в массиве. Обратите внимание на разницу с массивом в C. В любом случае, как указывает @IanofOz, переходить со списком - это путь сюда. –

+0

@IanofOz, ToArray() является функцией-членом списка : вам не нужна помощь Linq здесь! –

ответ

0

Я не понимаю, зачем вам это нужно.

но желаете ли вы, как?

class StudentMarks 
{ 
    public const int Max = 50; 
    public string Surname { get; set; } 
    public string Name { get; set; } 
    public string Group { get; set; }                  
    public int[] Marks { get; private set; } 

    public StudentMarks(string surname, string name, string group, int amountOfMarks) 
    { 
    Surname = surname;                      
    Name = name; 
    Group = group; 
    Marks = new int[amountOfMarks]; 
    } 
} 

public static void ReadData(out StudentMarks[] Students, out int amount) 
{ 
    amount = 0; 
    Students = new StudentMarks[Max]; 
    using (StreamReader reader = new StreamReader("C:\\Users\\Andrius\\Desktop\\Mokslams\\C#\\Pratybos\\P3\\P3.2\\StudentsMarks.csv")) 
    { 
    reader.ReadLine(); reader.ReadLine(); 
    string line = null; 
    while (null != (line = reader.ReadLine())) 
    { 
     string[] values = line.Split(','); 
     string surname = values[0]; 
     string name = values[1]; 
     string group = values[2]; 
     int i = 0; int yMax = 3 + amountOfMarks;int yMin = 4; 
     Students[amount] = new StudentMarks(surname, name, group, amountOfMark); 
     while (amountOfMarks >= i) 
     { 
     if (yMin <= yMax) 
     { 
      Students[amount].Marks[i] = int.Parse(values[yMin]); 
      yMin++; 
     } 
     i++; 
     } 
     amount++; 
    } 
    } 
} 
Смежные вопросы