C# 如何重写ToString()方法以输出列表?

C# 如何重写ToString()方法以输出列表?,c#,.net,list,class,overriding,C#,.net,List,Class,Overriding,是否可以重写ToString()方法以输出列表? 这是我的密码 namespace CircularClass { class InfinitelyCircular { public class RatsInAShip { public string RatBreed; public string RatWeight; public string RatAge;

是否可以重写ToString()方法以输出列表? 这是我的密码

    namespace CircularClass
{
    class InfinitelyCircular
    {

        public class RatsInAShip
        {
            public string RatBreed;
            public string RatWeight;
            public string RatAge;
            public bool HasChildren;
            public List<RatsInAShip> RatChildren;
            public override string ToString()
            {
                return String.Format("RatBreed:{0}\n RatWeight:{1}\n RatAge:{2}\n HasChildren:{3}",RatBreed, RatWeight, RatAge, HasChildren);
            }
        }

        static void Main(string[] args)
        {
            var mu = new RatsInAShip()
                         {
                             RatAge = "100",
                             RatBreed = "RexRat",
                             RatWeight = "200",
                             HasChildren = true,
                             RatChildren = new List<RatsInAShip>()
                         };

            for (var i = 0; i < 3; i++)
            {
                var cu = new RatsInAShip()
                             {
                                 RatAge = "100",
                                 RatBreed = "DwarfRat"+i,
                                 RatWeight = "200",
                                 HasChildren = false
                             };
                mu.RatChildren.Add(cu);
            }

            //Output
                Console.WriteLine(String.Format("{0}, {1}", mu.RatBreed, mu.RatChildren[0]));

        }
    }
}
名称空间循环类
{
类无限圆
{
公共类RatsInAShip
{
公营鼠种;
公弦鼠重;
公营房屋租金;
公共学校有孩子;
公开儿童名单;
公共重写字符串ToString()
{
返回String.Format(“ratbride:{0}\n RatWeight:{1}\n RatAge:{2}\n HasChildren:{3}”,ratbride,RatWeight,RatAge,HasChildren);
}
}
静态void Main(字符串[]参数)
{
var mu=新的RatsInAShip()
{
RatAge=“100”,
ratbride=“RexRat”,
RatWeight=“200”,
HasChildren=正确,
RatChildren=新列表()
};
对于(变量i=0;i<3;i++)
{
var cu=新的RatsInAShip()
{
RatAge=“100”,
Ratbread=“DwarfRat”+i,
RatWeight=“200”,
HasChildren=false
};
μ.棘轮.加(铜);
}
//输出
WriteLine(String.Format(“{0},{1}”,mu.ratbride,mu.RatChildren[0]);
}
}
}
如何重写ToString()以输出列表中的所有子项?

您不能更改被重写方法的返回类型

您需要编写自己的方法来返回列表:

public IList<string> ToList()
{
  // your code that returns a list of strings
}
public IList ToList()
{
//返回字符串列表的代码
}

看起来您已经在重写类上的ToString()方法。。。所以使用StringBuilder和for/foreach循环构造输出字符串?

是:

public override string ToString()
{
    string result = "";
    if(RatChildren != null)
      foreach(var x in RatChildren)
        result += String.Format("RatBreed:{0}\n RatWeight:{1}\n RatAge:{2}\n HasChildren:{3}", x.RatBreed, x.RatWeight, x.RatAge, x.HasChildren);

    return result;
}
要输出列表吗?如中所示,是否返回列表?不,有两个原因:

  • 无法更改重写方法的返回类型
  • ToString()
    表示它返回一个字符串。返回任何其他内容都是非常不直观的,并且会导致代码出现支持问题

  • 您可以覆盖
    ToString
    ,就像您已经做的那样。您可以遍历列表中的元素以输出所需的字符串

    也许您可以在foreach循环中输出子项,如下所示:

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendFormat("RatBreed:{0}\n RatWeight:{1}\n RatAge:{2}\n HasChildren:{3}\n",RatBreed, RatWeight, RatAge, HasChildren);
        foreach (RatsInAShip rat in RatChildren)
        {
            sb.AppendFormat("\tRat Child: {0}\n", rat);
        }
        return sb.ToString();
    }
    
    我还没有编译这个,所以如果我犯了错误,请纠正我。
    [编辑]现在编译…:)

    你说的“名单”是什么意思?你说的是
    列表
    类吗?或者您只是指
    字符串中以逗号分隔的列表吗?您不能,
    ToString()
    ,任何重写的方法只能返回与父类相同的类型(在本例中为
    字符串
    )。您的意思是要输出一个字符串,每个子字符串在一个单独的行上?这可能有助于查看编辑,您还应该让它在附加到字符串时执行换行符或其他分隔符。还考虑使用<代码> StringBuilder < /代码> GRRR,我提供代码的建议,得到一个+2的家伙,我得到一个-1??撤销请…我做了一个-1当你有不正确的代码。我现在已经撤销了我的-1。(同意,某种分隔符,等等-但我们不要为他做所有的工作,lol)注意:Abhi,当我运行这个时,我得到一个异常,告诉你RatChildren变量没有设置为对象的实例。您必须修改类的其余部分,以确保列表已实例化。但这将需要对程序进行与“ToString”无关的其他更改。因此,如果将主函数的最后一行更改为:Console.WriteLine(mu);我还在RatsInAShip类定义中添加了一个初始值设定项,如下所示:public List RatChildren=new List();一旦这样做了,您将看到正确的结果,即:鼠类繁殖:RexRat鼠类体重:200鼠类:100鼠类儿童:真鼠类儿童:鼠类繁殖:侏儒鼠类体重:200鼠类:100鼠类儿童:假鼠类儿童:鼠类繁殖:侏儒鼠类体重:200鼠类:100鼠类儿童:假鼠类繁殖:侏儒鼠类2鼠类体重:200鼠类:100有孩子:错