如何用C#打印列表中所有Task对象的属性?
如何打印列表中每个Task的所有属性?
我正在复习类与属性的基础知识,现在需要实现打印Person对象的TaskList中每个Task的所有属性,达到指定的输出效果。
原代码
namespace FunProject { internal class Program { static void Main(string[] args) { var person1 = new Person { FirstName = "Mister", LastName = "Programmer", Age = 26 }; Console.WriteLine(person1.FullName()); var Task1 = new Task { TaskName = "read", Description = "gain knowledge", Id = 1, IsDone = true }; var Task2 = new Task { TaskName = "eat", Description = "gain sustenance", Id = 2, IsDone = false }; person1.TaskList = new List<Task>(); person1.TaskList.Add(Task1); person1.TaskList.Add(Task2); // 以下是我尝试过的代码,但没达到预期效果 // Person1.TaskList.ForEach(i => Console.Write("{0}\t", i)); // Person1.TaskList.ForEach (x => Console.WriteLine(x)); // Console.WriteLine(String.Join("{0}\t", Person1.TaskList.ToString())); // foreach (Task t in Person1.TaskList) // { // Console.WriteLine(t); // } Console.Read(); } } public class Person { public string FirstName { get; set; } public string LastName { get; set;} public int Age { get; set; } public List<Task> TaskList { get; set; } public string FullName() { return ($"{FirstName} {LastName}"); } } public class Task { public int Id { get; set; } public string TaskName { get; set;} public string Description { get; set; } public bool? IsDone { get; set;} } }
期望输出
Mister Programmer Current Tasks: TaskName: read TaskDescription: gain knowledge Id: 1 IsDone: true TaskName: eat TaskDescription: gain sustenance Id: 2 IsDone: false
解决方案
方法1:直接遍历打印每个属性(基础直观)
在Main方法中替换注释的遍历代码,直接访问每个Task的属性并按格式打印:
Console.WriteLine("Current Tasks:"); foreach (var task in person1.TaskList) { Console.WriteLine($"TaskName: {task.TaskName}"); Console.WriteLine($"TaskDescription: {task.Description}"); Console.WriteLine($"Id: {task.Id}"); Console.WriteLine($"IsDone: {task.IsDone}"); Console.WriteLine(); // 空行分隔不同任务 }
这种方法适合刚学习类与属性的场景,直接清晰地展示如何访问对象的属性。
方法2:重写Task类的ToString方法(面向对象封装)
修改Task类,重写ToString方法定义对象的字符串输出格式,这样后续打印Task对象时会自动使用这个格式:
public class Task { public int Id { get; set; } public string TaskName { get; set;} public string Description { get; set; } public bool? IsDone { get; set;} public override string ToString() { return $"TaskName: {TaskName}\nTaskDescription: {Description}\nId: {Id}\nIsDone: {IsDone}\n"; } }
然后在Main方法中只需简单遍历打印:
Console.WriteLine("Current Tasks:"); foreach (var task in person1.TaskList) { Console.WriteLine(task); } // 或者用List的ForEach简化代码 // person1.TaskList.ForEach(task => Console.WriteLine(task));
这种方法把对象的输出格式封装在类内部,符合面向对象的设计思想,后续需要修改输出格式时只需修改ToString方法即可。
内容的提问来源于stack exchange,提问作者minTwin
相关产品推荐
相关产品推荐

