2016-05-25 5 views
2

私は主に(ファイルの解析後に)呼び出し側に2次元配列を提供するクラスを持っています。この配列を正常に戻していますが、その呼び出し元がその2次元配列を複数区切り文字列に変換する方法を提供する必要があります。以下の擬似コード。c#.net overrideマルチ配列用のToString

全開示:私の時間のほとんどは、他のソフトウェアでのスクリプトなので、私は、発信者のことができるようにしたい現実には、特にC#でOOPに

ビットさびだ:

string[,] results; 
getArray (arg1, arg2, etc, out results); 
Debug.WriteLine(results.ToString(delim1, delim2)); 

が、私はToStringメソッドのために、この上書きを作成する方法については明確ではありませんよ()、何かのように:

public override string[,] ToString(string rowSeparator, string columnSeparator) 
{ 
    string retVal = ""; 
    for(int r = 0; r < this.getUpperBound(0); r ++) 
    { 
     for (int c = 0; c < this.getUpperBound(1); c++) 
     { 
      retVal += this[r,c]; 
      if (c + 1 < this.getUpperBound(1)) 
      { 
       retVal += columnSeparator; 
      } 
     } 
     if (r + 1 < this.getUpperBound(0)) 
     { 
      retVal += rowSeparator; 
     } 
    } 
    return retVal; 
} 
+1

スニペットコードで 'ToString'を呼び出すことを意味しましたか? –

+1

@JonSkeet、はい。お問い合わせありがとう、私はそれを示す編集した – Keith

+2

'getArray'を制御している場合は、' out'パラメータを使用するのではなく、それを返すことがほぼ確実です。そして、.NETの命名規則。 –

答えて

5

オーバーライドしないということあなたはオーバーロードの既存のToStringメソッドにしようとしています。基本的にはできないので、何も上書きしようとしていません。クラス宣言内のメンバーをオーバーライドするだけで、自分でstring[,]クラスを宣言することはできません。

あなたはextension methodであなたの目標を達成することができます:発信者が使用するためには、ArrayExtensionsを含む名前空間、またはArrayExtensionsクラス自体のusing staticディレクティブusingディレクティブを持っている必要がありますことを

public static class ArrayExtensions 
{ 
    public static string ToString(
     this string[,] array, string rowSeparator, string columnSeparator) 
    { 
     // Code as per your method, but using array instead of this 
    } 
} 

注意をこれは拡張メソッドです。

repeated string concatenationではなく、StringBuilderを実装することをおすすめします。

+0

私はあなたがここで正しい答えを持っていると思っていますが、私は指示を正しく使うことができません。発信者からスニペットを表示できますか? – Keith

+2

@Keith:もし 'ArrayExtensions'が' Foo.Bar'の名前空間にあれば 'Foo.Barを使用してください。 'の指示を使うだけです。 –

+0

ありがとうございましたJonさん、実際に名前空間を共有しているのでクリアしましたここではクラスの間にあるので、私はusingディレクティブを必要としませんでした。最後の呼び出しは 'results = res.ToString(" \ r \ n "、" \ t ");'です。単体テスト、ありがとう! – Keith