C# 重写ToString()时无法获得正确的返回
我有一个类,记录,在这个类中有一个对象数组(字段)。理想情况下,我希望能够调用Record.ToString(),并让它返回fields数组中每个字段的ToString()。Field类包含一个字符集C# 重写ToString()时无法获得正确的返回,c#,C#,我有一个类,记录,在这个类中有一个对象数组(字段)。理想情况下,我希望能够调用Record.ToString(),并让它返回fields数组中每个字段的ToString()。Field类包含一个字符集 class Record { class Field { public char[] contents; public Field(int size) { contents = new char[size];
class Record
{
class Field
{
public char[] contents;
public Field(int size)
{
contents = new char[size];
}
}
public Field[] fields;
public Record()
{
fields = new Field[4];
foreach(Field f in fields)
f = new Field(4);
}
public override string ToString()
{
string output = null;
foreach(Field f in fields)
output += f.contents.ToString();
return output;
}
}
注;我没有发布所有的代码,但是我有一些初始化函数,它们填充了char[]的内容,所以它们不是空的
出于某种原因,调用Record.ToString()会返回System.Char[]。
我确实有一个Record实例,并尝试了多种不同的方法,包括在Field类中重写ToString(),以返回contents.ToString(),但它给出了相同的输出。最奇怪的是
System.Console.WriteLine(Record.fields[x].contents);
给我内容中包含的字符串。使用
output += new string(f.contents);
如你所见。此外,考虑使用StringBuilder为<代码>输出< /> > < P>使用
output += new string(f.contents);
如你所见。此外,考虑使用StringBuilder为<代码>输出< /> > < P>使用
output += new string(f.contents);
如你所见。此外,考虑使用StringBuilder为<代码>输出< /> > < P>使用
output += new string(f.contents);
如你所见。此外,考虑使用StringBuilder作为代码>输出 .< /P> < p>当调用f.Cyth.ToSrTrn()时,您正在返回char [];不是内容的内容。如果要返回内容中的内容,则必须遍历f.contents[],或者使用Phillip Grassl发布的内容,这将使用char[]并将其生成字符串 f、 contents.ToString()=字符[]
新字符串(f.contents)=字符[0]+字符[1]+字符[2]+字符[3]。etc当调用f.contents.ToString()时,您正在返回字符[];不是内容的内容。如果要返回内容中的内容,则必须遍历f.contents[],或者使用Phillip Grassl发布的内容,这将使用char[]并将其生成字符串 f、 contents.ToString()=字符[]
新字符串(f.contents)=字符[0]+字符[1]+字符[2]+字符[3]。etc当调用f.contents.ToString()时,您正在返回字符[];不是内容的内容。如果要返回内容中的内容,则必须遍历f.contents[],或者使用Phillip Grassl发布的内容,这将使用char[]并将其生成字符串 f、 contents.ToString()=字符[]
新字符串(f.contents)=字符[0]+字符[1]+字符[2]+字符[3]。etc当调用f.contents.ToString()时,您正在返回字符[];不是内容的内容。如果要返回内容中的内容,则必须遍历f.contents[],或者使用Phillip Grassl发布的内容,这将使用char[]并将其生成字符串 f、 contents.ToString()=字符[]
新字符串(f.contents)=字符[0]+字符[1]+字符[2]+字符[3]。etc太棒了,谢谢!不过我有一个问题,为什么我打电话时它能工作?System.Console.WriteLine(Record.fields[x].contents);这是一个很好的问题,我相信知道得比我多的人会知道的。但我相信魔法。可能是因为控制台不喜欢数组而执行某些操作?因为它被传递给整个数组,而不是ToString()值,尽管如果调用contents.ToString()它也会工作,这是因为System.Console.WriteLine()有一个额外的重载,它接受char[]并正确输出。看这里:太棒了,谢谢!不过我有一个问题,为什么我打电话时它能工作?System.Console.WriteLine(Record.fields[x].contents);这是一个很好的问题,我相信知道得比我多的人会知道的。但我相信魔法。可能是因为控制台不喜欢数组而执行某些操作?因为它被传递给整个数组,而不是ToString()值,尽管如果调用contents.ToString()它也会工作,这是因为System.Console.WriteLine()有一个额外的重载,它接受char[]并正确输出。看这里:太棒了,谢谢!不过我有一个问题,为什么我打电话时它能工作?System.Console.WriteLine(Record.fields[x].contents);这是一个很好的问题,我相信知道得比我多的人会知道的。但我相信魔法。可能是因为控制台不喜欢数组而执行某些操作?因为它被传递给整个数组,而不是ToString()值,尽管如果调用contents.ToString()它也会工作,这是因为System.Console.WriteLine()有一个额外的重载,它接受char[]并正确输出。看这里:太棒了,谢谢!不过我有一个问题,为什么我打电话时它能工作?System.Console.WriteLine(Record.fields[x].contents);这是一个很好的问题,我相信知道得比我多的人会知道的。但我相信魔法。可能是因为控制台不喜欢数组而执行某些操作?因为它被传递给整个数组,而不是ToString()值,尽管如果调用contents.ToString()它也会工作,这是因为System.Console.WriteLine()有一个额外的重载,它接受char[]并正确输出。请看这里: