[英]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一个清单? 如,返回一个列表? 不,有两个原因:
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.