C# 如何重写ToString()方法以输出列表?
是否可以重写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;
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有孩子:错