Допустим, есть класс «Сотрудник». У него есть Имя (строка) и Описание (строка).
Я составил список под названием «Сотрудники», который должен содержать разные классы «Сотрудники» с разными параметрами.
Я пытался отобразить его с помощью оператора foreach, однако он возвращает только строку «.Employee».
using System;
using System.Collections.Generic;
namespace Work
{
// Employee class
public class Employee
{
public int ID;
public string Name;
public string Description;
}
class Program
{
// Create a list
List<Employee> employees = new List<Employee>();
// Add new employye method
private void CreateEmployee(int id, string name, string description)
{
Employee employee = new Employee();
employee.ID = id;
employee.Name = name;
employee.Description = description;
employees.Add(employee);
}
static void Main(string[] args)
{
// Neccessary because void Main() is static field
Program P = new Program();
// Calling method and adding new employee with new parameters to the list
P.CreateEmployee(1, "James", "Funny");
// Now's the question:
// How to access this data?
// I would like to make a file which would contain all information in the list, which I can read and load in a list again
// Or just at least display it to the console
}
}
}
В принципе, я хочу файл, который будет выглядеть так:
1,"James","Funny";
2,"John","Just John";
Хотя я не уверен, что "" нужны для сохранения строк.
Перегрузите функцию ToString
в своем классе Employee
и используйте ее.
Райан Уилсон, это тоже вариант, хотя я боюсь, что для его запуска на ПК требуются предустановленные программы? Я с нетерпением жду создания программы, которую можно будет установить на любой другой компьютер.
Может быть, это поможет кому-то. Console.WriteLine("{0}", employees.Select(e => e.ToString()).ToArray());
отображает первый элемент (класс) списка: "1, James, Funny" Console.WriteLine("{1}", employees.Select(e => e.ToString()).ToArray());
отображает второй элемент: "2, John, Just John"
Во-первых, почему вы создаете экземпляр класса Program
, просто создайте метод, а также список static
и используйте их непосредственно в методе Main
.
Во-вторых, зачем вы создали метод CreateEmployee
? Просто определите конструктор для вашего класса Employee
, который будет выполнять работу по присвоению значений полям.
Наконец, вам нужно строковое представление вашего объекта типа Employee
. Метод переопределения ToString
является ключевым здесь.
Итак, ваш класс должен выглядеть так:
public class Employee
{
public int ID;
public string Name;
public string Description;
public Employee(int ID, string Name, string Description)
{
this.ID = ID;
this.Name = Name;
this.Description = Description;
}
public override string ToString()
{
return $"{ID}, {Name}, {Description}";
}
}
Имея это, вы можете написать свой метод Main
следующим образом:
List<Employee> employees = new List<Employee>();
employees.Add(new Employee(1, "James", "Funny"));
File.WriteAllLines("file path", employees.Select(e => e.ToString()).ToArray();
Большое спасибо, это действительно помогло мне. Я искал именно ЭТО решение, это потрясающе. Вам не хватает одной круглой скобки в последней строке, а также я думаю, мы должны упомянуть, что для этого требуется using System.Linq;
Хотя это работает, я собираюсь проверить документацию, потому что некоторые аспекты кода немного запутаны, но я надеюсь, что я пойму после некоторых исследований. Спасибо, вы помогли мне сделать небольшой прорыв
@Ethan Операторы using
обычно опускаются, особенно когда речь идет о пространствах имен фреймворка.
Подскажите, пожалуйста, как загрузить данные из файла в список?
@Итан File.ReadAllLines
это то, что тебе нужно. Я также рекомендую прочитать о классе File
и изучить его статические методы для чтения и записи в файл.
Итак, как преобразовать строку из файла в тип Employee? Я попробовал List<Employee> employees = File.ReadAllLines("d:\\employees.txt").ToList();
, и он говорит, что не может неявно преобразовать тип ...<string>... в ...<Work.Employee>
@ Итан File.ReadAllLines("d:\\employees.txt").Select(l => l.Split(",").Select(i => i.Trim())).Select( l => new Employee(int.Parse(l[0]), l[1], l[2])).ToList();
У меня почему-то не получается. Он продолжает говорить, что «Сотрудник не содержит конструктора, который принимает столько аргументов», «Аргумент 2: невозможно преобразовать из« char »в« строку »»,« ToList не существует в текущем контексте »... Почему это ? Хотя я начинаю понимать, как это работает
Теперь он говорит только «Невозможно применить индексирование с помощью [] к выражению типа «IEnumerable <string>» три раза».
@ Итан Попробуй File.ReadAllLines("d:\\employees.txt").Select(l => l.Split(",").Select(i => i.Trim()).ToArray()).Select( l => new Employee(int.Parse(l[0]), l[1], l[2])).ToList();
Этот работает. Так это было потому, что нам нужно было сделать массив из данных перед загрузкой, я полагаю
Обязательно ли сохранять в файл? Как насчет создания базы данных и хранения там информации о сотрудниках? Если это должен быть файл, хотите ли вы создать CSV или обычный текст и т. д.?