2016-08-02 2 views
0

私はちょうど出力にコレクションを渡すコレクションの値を印刷することができます。C#はコレクションの値をJavaのように単純に出力できますか? Javaでは

Map<Integer, String> map = new HashMap<Integer, String>(){ 
      { 
       put(1, "one"); 
       put(2, "two"); 
      } 
}; 
System.out.println(map); 

出力:C#と同様のコードでは

{1=one, 2=two} 

は私の内部のコレクション型、代わりの値についての情報を与えるだろう、私はそれを探していましたが、C#で理解しているように、コレクションから値を出力するためには回避する必要があります。 私はC#で理解しているように、Javaのように単純にコレクションの値を表示することはできません。

+0

既存の提案(そのJavaの比較をしていない) - 辞書/ HashSetの - http://stackoverflow.com/questions/5899171/is-there-anyway-to-handy-変換辞書-to-string/17281317、任意の要素型の任意の型のコレクション - http://stackoverflow.com/questions/5079867/c-sharp-ienumerable-print-out –

答えて

0

任意のタイプのオブジェクト(たとえば、Console.WriteLine())を渡すときには、そのオブジェクトのToString()メソッドが呼び出され、印刷可能な文字列に変換されます。

デフォルトの実装ToString()は、タイプ名を返します。いくつかのコレクションは、コレクション内の要素の数のような情報を含む文字列を返す、ToString()のオーバーライドされた実装を持っています。

しかし、デフォルトでは、Javaの例のような機能はありません。

string.Joinを使用することであろうこのような出力を得るための簡単な方法といくつかのLINQ:

Console.WriteLine("{" + string.Join(", ", map.Select(m => $"{m.Key}={m.Value}")) + "}"); 

あなたのコレクション内の要素は、すでに適切な.ToString()実装を持っている場合(例えばKeyValuePair<TKey, TValue>のようなマイケルLYが指摘したように) 、あなたはSelect部分をスキップすることができます

Console.WriteLine("{" + string.Join(", ", map) + "}"); 
+1

私はこの回答をよりエレガントに見つける: var asString = string .Join( ";"、辞書); @stackoverflow.com/a/17281317/4083283 –

+0

@MickaelLY thxだから、明らかに 'KeyValuePair <,>'の '.ToString()'が実装されています。 –

関連する問題