2016-04-11 3 views
0

Это мой первый раз, поэтому ... будьте осторожны;) Добро пожаловать!Создание нескольких объектов в цикле

Вот моя проблема. Я должен создать несколько объектов внутри цикла. Но я не знаю, как это сделать. Уже пробовали делать это таким образом:

List<myClass> ObjectList = new List<MyClass>(); 

, а затем:

ObjectList.Add(new MyClass(a,b)); 

Класс с дескриптором и Params «а» и «б» установлены.

Итак, я ищу это:

class myClass 
{ 
    int a; 
    int b; 
    public MyClass(int A, int B) 
    { 
     a=A; 
     b=B; 
    } 

    class Main() 
    { 
     Random r=new Random(); 
     MyClass a1 = new MyClass(r.Next(0,11)); 
     MyClass a2 = new MyClass(r.Next(0,11)); 
     MyClass a3 = new MyClass(r.Next(0,11)); 
     MyClass a4 = new MyClass(r.Next(0,11)); 
     MyClass a5 = new MyClass(r.Next(0,11)); 
     MyClass a6 = new MyClass(r.Next(0,11)); 
    } 
} 

И я должен найти способ, чтобы создать эти объекты в цикле, потому что я не могу знать, сколько из них будет, как я чтение матрицы из файла.

+4

Так что же e проблема, почему вы не можете использовать цикл? Покажите свои усилия. Покажите, как выглядит ваш файл. –

+1

Если вы не знаете, сколько объектов есть, вы можете использовать 'while (! EndOfFile) {}' и создавать каждый объект и добавлять его в список. – Rob

+1

Вы можете использовать свой код внутри цикла: 'ObjectList. Добавить (новый MyClass (r.Next (0,11), r.Next (0,11))); '. Как показано, трудно понять вашу проблему и как мы можем помочь ее решить. – Fabjan

ответ

1

Существует общее решение ситуации, когда вы хотите что-то инициализировать, неоднократно пытаясь получить предмет от источника до тех пор, пока источник не закончится.

Это называется конструкцией «loop-and-half» (и это правильная «структурированная» конструкция, поскольку это цикл с одним выходом).

Общий подход выглядит следующим образом:

while (true) 
{ 
    attempt to obtain next item; 

    if (no more items available) 
     break loop; 

    add item to collection; 
} 

Общая реализация в C# может выглядеть следующим образом:

class MyClass 
{ 
} 

class MyInitData 
{ 
} 

static class Program 
{ 
    static void Main(string[] args) 
    { 
     var list = new List<MyClass>(); 

     while (true) 
     { 
      var initData = GetNextItem(); // Returns null when no more items are available. 

      if (initData == null) // No more items available. 
       break; 

      list.Add(CreateMyClassFromInitData(initData)); 
     } 
    } 

    static MyInitData GetNextItem() // Returns null when no more items are available. 
    { 
     // Code to return next item. Implementation omitted here. 
     return null; 
    } 

    static MyClass CreateMyClassFromInitData(MyInitData initData) 
    { 
     // Create a new MyClass from initData. Implementation omitted here. 
     return new MyClass(); 
    } 
} 

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

var list = new List<int>(); 

using (var reader = File.OpenText("MyFileName.txt")) 
{ 
    while (true) 
    { 
     string line = reader.ReadLine(); 

     if (line == null) 
      break; 

     list.Add(int.Parse(line)); 
    } 
}