[英]C# - Print/write out/change a mutable list of objects, properties is in another class. (great answers)
长期的读者,第一次的海报。 我希望这不是重复的,但是我所看到的相似的东西都是针对其他语言或复杂的语言,我希望不是。 应该有一个简单的解决方案来帮助像我这样的所有初学者。
我正在尝试制作一个函数,以简单地打印出用户创建的对象,这些对象放在另一个类的列表中。
我的Employee对象课程:
public int ID { get; set; }
public string FirstName { get; set; }
ect...
我做了一个打印功能(如果可以使用):
public void PrintEmployee()
{
Console.WriteLine("\nID:{0}\nFull Name: {1} {2}\nSocial Security Number: {3}\nWage: {4}\n", ID, FirstName, LastName, SocialNumber, HourWage);
}
构造函数// 无关紧要,但可以帮助其他人做类似的项目
public Employee(int ID, string firstname, string lastname, string socialnumber, string hourwage)
{
ID = 0;
FirstName = firstname;
LastName = lastname;
SocialNumber = socialnumber;
HourWage = hourwage;
}
带有类并创建对象的注册表类://原来无关紧要,但可以帮助其他人进行类似的项目。
public List<Employee> Accounts { get; set; }
public Registry()
{
Accounts = new List<Employee>();
}
public void CreateAccount()
{
var employee = new Employee(0, "", "", "", "");
Console.Write("Enter first name <Name>: ");
employee.FirstName = Console.ReadLine();
Console.Write("Enter last name <Name>: ");
employee.LastName = Console.ReadLine();
Console.Write("Enter Social Security Number<YYMMDD-XXXX>: ");
employee.SocialNumber = Console.ReadLine();
Console.Write("Enter wage <XXXkr/h>: ");
employee.HourWage = Console.ReadLine();
employee.ID = Accounts.Count + 1;
Accounts.Add(employee);
}
我希望每个员工都以自己的格式打印,但是我首先尝试以任何方式打印它们。 在main方法中创建一个Registry对象并调用打印函数后,我在控制台中得到ConsoleApplicationName.Method 。 该功能应该很简单(我们才刚刚开始学习),我可能会感到尴尬,但是对于我一生来说,我不知道如何使它起作用。
我试图将Employee打印方法放入Console.WriteLine,但它抱怨静态/无效,我将所有属性更改为静态和/或创建了它们的实例,但这无济于事。 继承可以解决问题吗?
我可以通过将列表和函数放在Employee类中来使其工作? 有人告诉我,将类和对象按其本质划分是一种好习惯,要做一些事情但要做好。 我需要在某个地方定义如何打印每个员工,但我不知道在哪里。
我尝试过注册表中的方法,我尝试过:
public void PrintRegistry() //nr1
{
Accounts.ForEach(employee => Console.Write("{0}\n", employee));
}
> foreach(Employee employee in Accounts) // nr2
> {
> Console.WriteLine(employee);
> }
Accounts.ForEach(Console.WriteLine); // nr3
感谢您的帮助,如果我需要花几个小时才能完全理解您的答复,我们将很乐意投入。
您将在Employee
类中需要自己的ToString
实现。 您只需要重写它,并将您的PrintEmployee
代码PrintEmployee
新方法即可。
只是为了弄清楚我的意思,我为您提供了一个示例,说明了替代的外观:
public override string ToString()
{
return string.Format("ID:{0}{5}Full Name: {1} {2}{5}Social Security Number: {3}{5}Wage: {4}{5}", ID, FirstName, LastName, SocialNumber, HourWage, Environment.NewLine);
}
为您提供一些背景信息:c#中的每个类或结构都继承自Object
类。 默认情况下, Object
类已经具有ToString
的实现。 此基本实现只会打印出Employee类的名称空间+类名。 但是使用上面的覆盖,您可以简单地编写如下内容,并获得所需的输出:
var employee = new Employee { Firstname = "Happy", Lastname = "Coder", ... }
Console.WriteLine(employee);
这是一个简单的解决方案
private void PrintRegistry()
{
foreach(Employee employee in Accounts)
{
Console.WriteLine("\nID:{0}\nFull Name: {1} {2}\nSocial Security Number: {3}\nWage: {4}\n", employee.ID, employee.FirstName, employee.LastName, employee.SocialNumber, employee.HourWage);
}
}
或者,如果“ PrintEmployee”过程(由于未返回值而无法运行)在“ Employee”类中。
private void PrintRegistry()
{
foreach(Employee employee in Accounts)
{
employee.PrintEmployee();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.