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

在C#中如何重写List<T>的ToString()及自定义方法?

自定义List控制台输出与方法重写问题解答

一、自定义List的控制台打印效果

.NET自带的List<T>默认ToString()只会输出类型名称,要实现自定义打印效果,有几种实用方案:

1. 继承List并重写ToString

直接创建List<T>的子类,重写ToString方法来定制输出格式:

public class CustomNodeList : List<Node>
{
    public override string ToString()
    {
        // 按需求拼接元素,比如用逗号分隔
        return "[" + string.Join(',', this) + "]";
    }
}
// 使用示例
var myList = new CustomNodeList { new Node(), new Node() };
Console.WriteLine(myList);

2. 给List写扩展方法

不想继承的话,用扩展方法给所有List<T>添加自定义打印方法:

public static class ListExtensions
{
    public static string ToCustomString<T>(this List<T> list)
    {
        return "[" + string.Join(',', list) + "]";
    }
}
// 使用方式
Console.WriteLine(myNodeList.ToCustomString());

3. 重写List元素的ToString(针对自定义类型)

如果List里存的是你自己定义的Node类,直接重写Node的ToString,默认打印List时会自动调用每个元素的ToString:

public class Node
{
    public int Id { get; set; }
    public string Label { get; set; }

    public override string ToString()
    {
        return $"{Id}:{Label}"; // 自定义单个Node的输出格式
    }
}
// 此时直接打印List<Node>,会输出类似[1:NodeA,2:NodeB]的效果
Console.WriteLine(myNodeList);

二、重写返回List类型的方法

重写方法的核心前提是:父类必须定义了一个可重写的同名方法(用virtual/abstract修饰)。

步骤示例

  1. 先在父类中定义虚方法:
public class BaseClass
{
    // 父类定义返回List<Node>的虚方法
    public virtual List<Node> GetNodeList()
    {
        // 默认实现,返回空列表或基础数据
        return new List<Node>();
    }
}
  1. 子类中重写该方法:
public class DerivedClass : BaseClass
{
    public override List<Node> GetNodeList()
    {
        // 自定义逻辑,返回你需要的List<Node>
        var result = new List<Node>();
        result.Add(new Node { Id = 1, Label = "CustomNode" });
        // 其他添加节点的逻辑
        return result;
    }
}

注意事项

  • 方法名尽量用有意义的名称(比如GetNodeList),避免用list这种模糊命名,也不要和关键字冲突
  • 重写时,方法的返回类型、参数列表必须和父类的虚方法完全一致
  • 如果父类没有对应的可重写方法,不能使用override关键字,只能定义新的独立方法

内容的提问来源于stack exchange,提问作者MAbdullah005

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:11