2009-08-10 40 views
0

我不知道如何使問題更清楚,但這是bascially問題:如何在重寫的ToString函數中返回一個複合字符串?

我有一個從我的另一個類dervived類。 基類具有重寫的Tostring函數(返回由冒號分隔的2個字符串)。

問題是我的派生類可以有一個字符串數組或只是一個字符串,所以當我重寫ToString函數時,我需要返回基類以及字符串數組(用「\ n」分隔) )在派生類中。現在我想知道做什麼是最好的方法。我應該返回一個字符串數組(如果可能的話),還是我別無選擇,只能使用Stringbuilder類?如果還有其他方法可以做到這一點,請告訴..無論他們多麼瘋狂,所有想法都會受到歡迎:)

回答

12

當覆蓋ToString時,你只返回一個字符串。你不能返回任何其他類型。這聽起來像你可能想是這樣的:

public override ToString() 
{ 
    return base.ToString() + "\n" + string.Join("\n", stringArray); 
} 

這是假設你想返回一個字符串,如:

base1:base2 
this1 
this2 
this3 

當行分隔符是\n

+0

非常感謝你 – 2009-08-10 21:39:03

+0

你應該使用'Environment.NewLine'作爲分隔符,除非有特殊要求不這樣做,其中'ToString()'實現通常不會是例外之一。 :) – 2009-08-11 05:21:58

+0

我只是在字符串中的「規範」。我甚至不確定我是否同意你的建議 - 就像使用Encoding.Default一樣。不知道字符串將在哪裏使用,沒有人可能知道什麼是正確的行結束符。 – 2009-08-11 05:23:54

0

您可以使用基類的ToString()的返回值。

您可以通過

base.ToString();來訪問它。

1

在我看來,你的設計中存在一些缺陷,但考慮到你所說的,沒有辦法從ToString()方法返回一個字符串數組。所以你將不得不用派生的分隔基類的ToString()返回值。

public override string ToString() 
{ 
    return base.ToString() + ':' + "whatever"; 
} 
2

你所說的「迴歸的基類,以及字符串數組」是什麼意思?

如果你的意思是基類的ToString()方法,你可以嘗試:

base.ToString() + "\n" + String.Join("\n", theStringArray); 
+0

我的意思是返回基類的ToString方法以及來自我的派生類的字符串數組 – 2009-08-10 21:36:36

1

正如亨利所說,返回base.ToString(),那麼你可以用\ N使用字符串替換冒號。替換,然後將其與新派生的字符串組合。

當然,你可以在你的派生類中使用一個字符串,採用「string \ n string」的形式,而在ToString函數中,你只需執行替換步驟,然後將兩個字符串組合在一起。沒有數組,沒有stringbuilder,需要。如果你認爲他們的字符串值會很低,那麼這可能是最簡單的選擇。沒有數組或stringbuilder。

1

作爲一般規則,最好使用Stringbuilder而不是使用長操作來連接字符串。

如果你做到以下幾點:

string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken."; 

內存這將真正創造七根弦。

  1. 「這個我」
  2. 「S的EXA」
  3. 「這是一個EXA」
  4. 「PLE爲」
  5. 「這是一個例子串THA」
  6. 「噸壞了。」
  7. 「這是一個被破壞的示例字符串。」

的使用StringBuilder爲相同的功能只會創建五個,而隨着規模的上升StringBuilder的將做連接所有這些字符串更快的工作一起比後只運行了一堆+運營商之一其他。

當你串連的列表中沒有規定的時間提前,因爲是你的字符串對象數組的情況下尤其如此。

相關問題