C# 重写ToString()时无法获得正确的返回

C# 重写ToString()时无法获得正确的返回,c#,C#,我有一个类,记录,在这个类中有一个对象数组(字段)。理想情况下,我希望能够调用Record.ToString(),并让它返回fields数组中每个字段的ToString()。Field类包含一个字符集 class Record { class Field { public char[] contents; public Field(int size) { contents = new char[size];

我有一个类,记录,在这个类中有一个对象数组(字段)。理想情况下,我希望能够调用Record.ToString(),并让它返回fields数组中每个字段的ToString()。Field类包含一个字符集

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[]并正确输出。请看这里: