覆盖 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 使用 proc.waitFor() 调用 Powershell,无法获得正确的返回码
Java:为啥 \t 转义字符与 toString() 不一致? [复制]
javaweb编程时,通过request向前端传递数据时,前端总是无法获得正确的数据,求助,谢谢。