繁体   English   中英

如何将 ToString() 方法覆盖到 output 列表?

[英]How can I override the ToString() method to output a list?

是否可以将 ToString() 方法覆盖为 output 列表? 这是我的代码

    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]));

        }
    }
}

如何将 ToString() 覆盖为 output 列表中的所有孩子?

看起来您已经在 class 上覆盖了 ToString() 方法......所以......使用 StringBuilder 和 for/foreach 循环来构造 output 字符串?

也许你可以 output 在 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();
}

我没有编译这个,所以如果我犯了错误,请纠正我。 [编辑] 现在编译... :)

output一个清单? 如,返回一个列表? 不,有两个原因:

  1. 您不能更改被覆盖方法的返回类型。
  2. ToString()意味着它返回一个字符串。 返回任何其他内容都非常不直观,并且会导致代码出现支持问题。

不能更改被覆盖方法的返回类型。

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

public IList<string> ToList()
{
  // your code that returns a list of strings
}

是的:

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 您可以遍历列表的元素到 output 您想要的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM