Как использовать forloop для создания экземпляра / добавления нескольких сотрудников (все с именем Джо) в список? - PullRequest
0 голосов
/ 11 октября 2018

Примечание. Этот вопрос был пересмотрен, поэтому, если вы читаете ответы, имейте в виду, что в этом вопросе ранее задавались разные фамилии для каждого сотрудника.Теперь все они названы Джо.

Я создал foreachloop, который должен пройти через несколько списков (по одному для каждого свойства) и создать экземпляр объекта employee с именем Joe, фамилией и идентификаторомчисло.У всех сотрудников должно быть имя «Джо», но разные фамилии и идентификационные номера.Затем каждый новый сотрудник будет добавлен в список под названием «Сотрудники».У меня настроены списки имен, фамилий и идентификаторов, но когда я попытался вывести список сотрудников на консоль, он печатает информацию только одного сотрудника, 5 раз.Цикл, кажется, выполняет только первый элемент в каждом списке.Это ожидается для имени (Джо - единственный элемент в списке), но каждый раз следует переходить к другим фамилиям и идентификационным номерам.

Также: многие говорили, что foreach не является хорошим способом для этого;но мое задание специально просит, чтобы я использовал цикл foreach для заполнения этого списка.Я не уверен, что если их всех по имени Джо сделать это более или менее сложным, но это то, что мне нужно сделать.

Сотрудник - это его собственный класс, и список находится в файле программы.Я вставил оба ниже.Ответ, вероятно, очевиден, но я был бы признателен, если бы вы взглянули на то, что может пойти не так.Мне нужен цикл foreach, чтобы создать один объект сотрудника для каждого элемента в списках свойств, а затем распечатать их информацию в консоли.Спасибо вам большое!(И спасибо за ответы до редактирования. Сейчас я проверяю ваши решения и буду обновлять их по мере выполнения!)

Файл сотрудника:

namespace CSDrill_Loop
{
    public class Employee
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
        public int ID { get; set; }

    }
}

Файл программы:

namespace CSDrill_Loop
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Employee> Employees = new List<Employee>();
            List<string> firstnames = new List<string>()
            {
                "Joe"
            };

            List<string> lastnames = new List<string>()
            {
                "Jackson", "Smith", "Miller", "Turner", "Johnson"
            };

            List<int> IDs = new List<int>()
            {
                34332, 54754, 43523, 87012, 43158
            };

            foreach (string firstname in firstnames)
            {
                foreach (string lastname in lastnames)
                {
                    foreach (int ID in IDs)
                    {

                        Employee Employeeobject = new Employee();
                        Employeeobject.firstname = firstname;
                        Employeeobject.lastname = lastname;
                        Employeeobject.ID = ID;
                        Employees.Add(Employeeobject);


                        foreach (Employee Employee in Employees)
                        {
                            Console.WriteLine(Employeeobject.firstname + " "+Employeeobject.lastname+" "+Employeeobject.ID);

                        }
                       Console.ReadLine();
                    }
                }
            }
        }
    }
}

Ответы [ 5 ]

0 голосов
/ 11 октября 2018

Вот ваша проблема с печатью:

Удалить / Комментировать Console.Readline () и поместите его после конца Outermost foreachloop, то есть имен.Вы получите 5 * 5 * 5 = 125 записей согласно вложенности вашего forloop.

0 голосов
/ 11 октября 2018

Причина, по которой вы видите информацию только 1 сотрудника, заключается в следующей строке:

Console.ReadLine ();

Приложение не запускается, пока вы не нажмете Enter.

Но вся логика также немного странная, поскольку конечный результат будет выглядеть примерно так:

A, A, B, A, B, C, A, B,C, D ... (и еще 115 сотрудников!)

Вместо:

A, B, C, D, E. (5 сотрудников)

Таким образом, согласно предоставленной вами информации, я не думаю, что только один цикл foreach поможет.

0 голосов
/ 11 октября 2018

Это должно быть больше похоже на

**Employee file:**

namespace CSDrill_Loop
{
    public class Employee
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
        public int ID { get; set; }
        public Employee(string _firstName, string _lastName, int _ID)
        {
              firstname = _firstName;
              lastName = _lastName;
              ID = _ID;
        }
    }
}


**Program file:**

namespace CSDrill_Loop
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Employee> Employees = new List<Employee>();
            List<string> firstnames = new List<string>()
            {
                "Bob", "Jeff", "Dale", "Kate", "Ann"
            };

            List<string> lastnames = new List<string>()
            {
                "Jackson", "Smith", "Miller", "Turner", "Johnson"
            };

            List<int> IDs = new List<int>()
            {
                34332, 54754, 43523, 87012, 43158
            };
            for(int i = 0; i < firstNames.length; i++)
            {
                Employees.Add(new Employee(firstNames[i], lastNames[i], IDs[i]));
            }
        }
    }
}

, если вы можете использовать foreach, тогда

            int i = 0;
            foreach(var firstName in firstNames)
            {
                Employees.Add(new Employee(firstName, lastNames[i], IDs[i]));
                i++;
            }
0 голосов
/ 11 октября 2018

Эта проблема на самом деле не имеет смысла для цикла foreach, если у вас есть 3 отдельных списка, в которых данные расположены таким образом.Я предполагаю, что было недоразумение с назначением или структурой входных данных.В любом случае, если это необходимо, единственный реальный способ сделать это - иметь список индексов для циклического повторения и использовать его для доступа к различным спискам.Нечто подобное должно работать на вас.Кроме того, у вас действительно не должно быть операторов readline или каких-либо входных данных в циклах foreach.

List<Employee> Employees = new List<Employee>();
List<string> firstnames = new List<string>()
{
    "Bob", "Jeff", "Dale", "Kate", "Ann"
};

List<string> lastnames = new List<string>()
{
    "Jackson", "Smith", "Miller", "Turner", "Johnson"
};

List<int> IDs = new List<int>()
{
    34332, 54754, 43523, 87012, 43158
};

List<int> indexes = new List<int>()
{
    0, 1, 2, 3, 4
};

foreach (int index in indexes)
{
    Employee Employeeobject = new Employee();
    Employeeobject.firstname = firstnames[index];
    Employeeobject.lastname = lastnames[index];
    Employeeobject.ID = IDs[index];
    Employees.Add(Employeeobject);
}

foreach (Employee Employee in Employees)
{
    Console.WriteLine(Employee.firstname + " " + Employee.lastname + " " + Employee.ID);
}

Console.ReadLine();
0 голосов
/ 11 октября 2018

Вы можете захотеть цикл for вместо цикла foreach.Будьте осторожны с индексом исключения диапазона.

  for (int i = 0; i < firstnames.Length; i++)
            {
                Employee Employeeobject = new Employee();
                Employeeobject.firstname = firstnames[i]; //get item by index
                Employeeobject.lastname = lastnames[i];
                Employeeobject.ID = IDs[i];
                Employees.Add(Employeeobject);

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