2009-08-10 16 views
0

質問を明確にする方法がわかりませんが、これは基本的に問題です。オーバーライドされたToString関数で複合文字列を返すにはどうすればよいですか?

私は自分のクラスの別のクラスから派生したクラスを持っています。 基本クラスには、Tostring関数がオーバーライドされています(コロンで区切られた2つの文字列が返されます)。

問題は、私の派生クラスは文字列の配列を持つことができるので、ToString関数をオーバーライドすると、文字列の配列( "\ n"で区切られた文字列) )を返します。今私はこれを行うための最良の方法は何だろうと思っています。私は可能な場合は文字列の配列を返す必要がありますか、私は選択肢がないが、Stringbuilderクラスを使用する必要がありますか?これを行う別の方法があれば教えてください..どんなに夢中でも、すべてのアイデアを歓迎します:)

答えて

12

ToStringを無効にすると、にはがあり、文字列が返されます。他のタイプを返すことはできません。

行区切りが \nある
base1:base2 
this1 
this2 
this3 

:次のような文字列を返すようにしたいと仮定しています

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

:あなたはこのような何かをしたいかもしれないように聞こえます。

+0

ありがとうございます –

+0

ToString()の実装が一般的に例外の1つではないような特別な要件がない限り、セパレータには 'Environment.NewLine'を使用してください。 :) –

+0

私はちょうど文字列の "仕様"に行きました。私はあなたの推薦に同意するのかどうかもわかりません - それは 'Encoding.Default'を使うのと同じです。文字列がどこで使用されるかを知らなければ、誰も正しい行終端文字が何であるかを知ることはできません。 –

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メソッドと、派生クラスからの文字列配列を返すことを意味しました –

1

アンリが述べたように、base.ToStringを(返す)あなたは、\ n個の文字列を使用して、コロンを置き換えることができます。置き換えて、あなたの新たに派生した文字列と組み合わせてください。

もちろん、 "文字列\ n文字列"の形式を取る派生クラスの文字列を使用することができます。また、ToString関数では、単に置換を実行して2つの文字列を結合するだけです。配列はありません。stringbuilderも必要ありません。文字列値の数が少なくて済むと思うなら、これは最も単純なオプションかもしれません。配列もstringbuilderもありません。

1

一般的に、Stringbuilderを使用すると、長い行の+演算を使用して文字列を連結する方がよいでしょう。

次ない場合:

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

これは、実際にメモリに7つの文字列を作成します。

  1. "このI"
  2. "S EXA"
  3. "にPLE"
  4. 「T "これは、例えば文字列THAである" "これはEXAです"壊れた。"
  5. "これは破損した文字列の例です。"

同じ機能のためのStringBuilderを使用することは、唯一の5つを作成し、スケールが上がるようにStringBuilderは単に後に+演算子1の束を実行しているよりも、一緒にすべてのこれらの文字列を連結するより速く仕事をしますその他。

これは、文字列オブジェクトの配列の場合のように、連結のリストがあらかじめ決められていない場合に特に当てはまります。

関連する問題