2015-08-23 79 views
0

我有一個類Record,在該類內是一個對象(字段)數組。理想情況下,我希望能夠調用Record.ToString(),並返回字段數組中每個字段的ToString()。 Field類包含一個charArray。重寫時無法得到正確的返回值ToString()

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

給我包含在內容中的字符串。

回答

2

使用

output += new string(f.contents); 

所看到here。另外,考慮使用一個StringBuilder的output

1

您在調用f.contents.ToString()時正在返回char [];而不是內容的內容。如果你想返回內容中的內容,那麼你將不得不遍歷f.contents [],或者使用Phillip Grassl發佈的內容,它將使用char []並從它們中創建一個字符串。

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

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

+0

真棒,謝謝!我確實有一個問題,當我打電話時,它爲什麼會起作用? System.Console.WriteLine(Record.fields [x] .contents); –

+0

這是一個很好的問題,我敢肯定知道比我更瞭解的人會知道。但我相信魔術。可能是控制檯做了什麼,因爲它不喜歡數組?因爲它正在傳遞整個數組,而不是ToString()的值 – Seige

+0

事實上,雖然它會工作,如果你調用contents.ToString()以及 –

相關問題