覆盖 ToString() 时无法获得正确的返回

Posted

技术标签:

【中文标题】覆盖 ToString() 时无法获得正确的返回【英文标题】:Cannot get proper return when overriding ToString() 【发布时间】:2015-11-17 05:50:45 【问题描述】:

我有一个类,Record,在该类中有一个对象(字段)数组。理想情况下,我希望能够调用 Record.ToString() 并将其返回给我 fields 数组中每个 Field 的 ToString()。 Field 类包含一个 charArray。

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

给我内容中包含的字符串。

【问题讨论】:

【参考方案1】:

使用

output += new string(f.contents);

如here 所示。另外,请考虑为 output 使用 StringBuilder。

【讨论】:

【参考方案2】:

当您调用 f.contents.ToString(); 时,您正在返回 char[];不是内容的内容。如果您想返回内容中的内容,那么您将不得不遍历 f.contents[],或者使用 Phillip Grassl 发布的内容,这将使用 char[] 并从中创建一个字符串。

f.contents.ToString() = char[];

新字符串(f.contents) = char[0] + char[1] + char[2] + char[3] 。 . .等等

【讨论】:

太棒了,谢谢!我确实有一个问题,为什么我打电话时它会起作用? System.Console.WriteLine(Record.fields[x].contents); 这是一个很好的问题,我相信比我了解更多的人会知道。但我相信魔法。可能控制台做某事是因为它不喜欢数组?因为它传递的是整个数组,而不是 ToString() 值 确实如此,不过如果你调用 contents.ToString() 也会起作用 那是因为 System.Console.WriteLine() 有一个额外的重载,它需要一个 char[] 并正确输出。见这里:msdn.microsoft.com/en-us/library/…

以上是关于覆盖 ToString() 时无法获得正确的返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中正确覆盖 toString()?

Java 使用 proc.waitFor() 调用 Powershell,无法获得正确的返回码

Java:为啥 \t 转义字符与 toString() 不一致? [复制]

javaweb编程时,通过request向前端传递数据时,前端总是无法获得正确的数据,求助,谢谢。

无法从 jQuery Ajax 调用中获得正确的返回值 [重复]

Java 对象 始终要覆盖toString