2013-11-20 10 views
6

私は最近C#で遊んでいましたが、出力のフォーマットは分かりません。シンプルなC#の出力

using System; 

namespace Arrays 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Random r = new Random(); 

      int[] Numbers = new int[10]; 
      for (int i = 0; i < Numbers.Length; i++) 
      { 
       Numbers[i] = r.Next(101); 
      } 

      for (int i = 0; i < Numbers.Length; i++) 
      { 
       Console.WriteLine("index {0} holds number {0}", i,Numbers[i]); 
      } 
     } 
    } 
} 

出力 Code

は私の予想出力はindex i holds number Number[i]ました。誰でも何を変更するか説明したり、出力書式設定のトピックについてはC#の良いページにリンクしたりできます。 私は2行でそれを行う方法があることを知っています。

答えて

20

変更

Console.WriteLine("index {0} holds number {0}", i, Numbers[i]);

Console.WriteLine("index {0} holds number {1}", i, Numbers[i]);
理由:あなたのインデックス(フォーマットストリングで)ゼロベースのインデックス順に列後パラメータ を参照。文字列の後の最初のパラメータは{0}、2番目のパラメータは{1}、3番目のパラメータは{2}です。

this pageを参照してください。

編集: フォーマット文字列でもパラメータを複数回参照できます。例えば:

Console.WriteLine(
    "index {0} holds number {1} (Numbers[{0}] == {1})", i, Numbers[i]); 

また、これはあなたの第二の印刷が間違っている

Console.WriteLine(String.Format( 
    "index {0} holds number {1} (Numbers[{0}] == {1})", i, Numbers[i])); 
+0

奇妙なああ、... {0}はJavaで%dのように、数字のプレースホルダだと思いました。 –

+1

@destroyergmいいえ、実際にはString.Format関数は各パラメータで自動的に 'ToString()'を呼び出します。したがって、タイプは無関係です。 edit:型はいくつかの特別な書式文字列に対して 'IFormattable'を実装することができます。しかし、パラメータの順序によってインデックスが決まります。 –

5

に相当します。 string.Formatを使用しますが、2番目のパラメータはバインドしません。

それは次のようになります。

Console.WriteLine("index {0} holds number {1}", i, Numbers[i]); 
5
Console.WriteLine("index {0} holds number {1}", i, Numbers[i]); 
関連する問題