You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:45:54