2012-03-14 10 views
4

ToString()IEnumerable<Int32>に上書きします。すべてのIEnumerableのToString()メソッドをオーバーライドするには<Int32>?

私は拡張メソッドを使用することを考えていました。

しかし、私がこれを行うときには、それでもSystem.ObjectToString()が呼び出されます。メソッドの名前を変更すると、メソッドが呼び出されます。

私の拡張メソッドは静的クラスであるため、オーバーライドできません。

たとえば.ToString()List<Int32>にコールすると、ToString()の実装が呼び出されるようにするにはどうすればよいですか?

public static class ExtensionMethods 
{ 
    public static new string ToString(this IEnumerable<Int32> set) 
    { 
     var sb = new StringBuilder(); 

     // Do some modifications on sb 

     return sb.ToString(); 
    } 
} 
+0

この質問はやや不明瞭です。 'ToString'を' IEnumerable 'または' T'(この場合は 'Int32')に置き換えますか?オーバーライドすることはできませんが、それぞれ異なる解決策が適用される場合があります。 –

+0

"IEnumerable < Int32 >"でToString()をオーバーライドします。 (何らかの理由でスタックオーバーフローが発生して元のテキストにが削除されました) – pencilCake

+0

バックライン記号を使用してインラインコード例を追加しました。私はあなたの質問を編集しました。 –

答えて

9

リストの例でToString()を呼び出すと、ToString()実装が呼び出されるようにするにはどうすればよいですか?

基本的にはできません。一致するインスタンスメソッドが見つからない場合、拡張メソッドはのみ使用されます。

私は、あなたのメソッドに別の名前をつけて、問題を回避することをお勧めします。とあなたのメソッドが混乱する可能性があります。。ない既に持っている他のコード - 拡張メソッドobjectで宣言(例えば)メソッドに優先してマッチしたたとしても、それが唯一の適切なusing指令でコンパイルされた独自のコードのための違いを生むだろうと

注意通話を通常の通話にバインドします。

あなたが達成しようとしていることについてさらに詳しく知ることができれば、より多くのことをお手伝いできるかもしれませんが、現時点ではToDelimitedString(またはあなたの方法が何であれ) 。

3

あなたは拡張メソッドを使用する方法に代わるものではありませすることができます。

メソッドの解像度は、のメソッドが一致する拡張メソッドを見つけようとする前により前にチェックされます。

つまり、ToStringを置き換えることはできませんが、独自の方法を作成することはできます。

オーバーライドされたToStringメソッドを使用して独自のIEnumerable<T>タイプを作成するか、別のメソッド名を使用してください。もちろん、実際にはを使用している場合には、自分のタイプを使用するのはもちろんですが、を使用してください。

0

それは私が拡張メソッドに

を使用していますが、文字列として出力するためにあなたが IEnumerable<Int32>

を使用しているすべての場所でコレクションを呼び出すことができるという、ToStringメソッドをオーバーライドすることはできませんが、あなたcan create a wrapper

public static string ToString<T>(this IEnumerable<T> messages) 
{ 
     return ToString<T>(messages, Environment.NewLine, ""); 
} 



ToString<T>( this IEnumerable<T>messages, string separator, string sComment) 

は私のポストに記述されている ToString function for Generic List

参照記事で説明した拡張メソッドとして実装も同様のOverriding ToString() of List<MyClass>

同様の機能: Separator Delimited ToString for Array, List, Dictionary, Generic IEnumerable

関連する問題