Можем ли мы использовать общий список вместо массива объектов C # - PullRequest
2 голосов
/ 05 апреля 2011
class Student
{
  public string ID { get; set; }
  public string Name { get; set; }
}

Student[] students = new Student[10];
int j = 0;

for(int i=0; i < 100; i++)
{
  if (some condition)
  {
    student[j].ID = anotherIDlist[i]; //some value from another list;
    student[j].Name = anotherNamelist[i]; //some value from another list;
    j++;
  }
}

Здесь я не знаю длину массива. Нужно ли это динамически в зависимости от общих условий. Есть ли эффективный способ сделать то же самое, используя общий список? Если да, то как это сделать?

Ответы [ 6 ]

5 голосов
/ 05 апреля 2011

Ваш стиль кодирования разумен и распространен, но обратите внимание, насколько императив .Вы говорите «обойдите этот цикл, измените эту коллекцию, измените эту переменную», создавая машину, которая делает то, что вы хотите.Когда мне предоставляется выбор, я предпочитаю кодировать в декларативном стиле и позволить компилятору собрать машину для меня.Я был бы склонен написать вашу программу следующим образом:

var query = from i in Enumerable.Range(0, 100)
            where some_condition
            select new Student() { Id = ids[i], Name = names[i] };
var students = query.ToList();

Пусть компилятор беспокоится о циклах и переменных и еще много чего;Вы можете сосредоточиться на семантике, а не на механизмах.

3 голосов
/ 05 апреля 2011

Это действительно простые вещи:

var students = new List<Student>();

for(int i=0; i < 100; i++)
{
    if (some condition)
    {
        // You can produce the student to add any way you like, e.g.:
        someStudent = new Student { ID = anotherIDlist[i], Name = anotherNamelist[i] };
        students.Add(someStudent);
    }
}
1 голос
/ 05 апреля 2011

Да, общий List<Student> будет отлично работать здесь.

List<Student> students = new List<Student>();
for(int i=0; i < 100; i++)
{
  if (some condition)
  {
    Student s = new Student();
    s.ID = anotherIDlist[i]; //some value from another list;
    s.Name = anotherNamelist[i]; //some value from another list;
    students.Add(s);
  }
}
1 голос
/ 05 апреля 2011

Просто замените

Student[] students = new Student[10];

на

List<Student> students = new List<Student();

и цикл на:

  if (some condition)
  {
    Student student = new Student();
    student.ID = anotherIDlist[i]; //some value from another list;
    student.Name = anotherNamelist[i]; //some value from another list;
    students.Add(student);
    j++;
  }
1 голос
/ 05 апреля 2011
List<Students> students = new List<Students>;

for(int i=0; i < 100; i++)
{
  if (some condition)
  {
    students.Add(new Student { .ID = anotherIDlist[i], .Name = anotherNamelist[i]));
  }
}
0 голосов
/ 05 апреля 2011

Если вы хотите подобный синтаксис:

ArrayList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...