2016-09-16 12 views
0

String.Formatをループ内で使用したいと思いますが、内に変数iを定義することはできません。ここに私のコードは、params配列のインデックスに対応する番号を使用し、Format方法でそれを使用するには変数inside String.Formatの使用方法

StringBuilder Sb; 
for(i=0 ;i<=myObj.length;i++) 
{ 
    Sb=Sb.Append(String.Format("{i,5}",myObj[i].Tostring())); 
} 
+1

これは何を表示するはずですか? 'myObj [i]'の後に 'i'を印刷しようとしていますか? – itsme86

+0

固定幅のファイルを生成しようとしています。私は配列オブジェクトのインデックスまたは列です – TRA

+0

'<='は '!='または '<'でなければならないので、これはクラッシュします。 – dasblinkenlight

答えて

4

です。

Sb.Append(String.Format("{0,5}", myObj[i].ToString())); 
//or 
Sb.AppendFormat("{0,5}", myObj[i].ToString()); 

あなたは最新かつ最高のC#バージョンであることには十分に幸運なら、あなたはFormatをスキップしてそれを行うことができます。

また、ちょうどAppendまたはAppendFormatを呼び出し、Sbを再割り当てしないでください新しいstring interpolation構文:

Sp.Append($"{myObj[i],5}"); 

それとも、やっているすべてのパディングであることから、その後、あなたも行うことができます。

Sb.Append(myObj[i].ToString().PadLeft(5)); 
+0

デフォルトで呼び出される 'myObj [i]'に 'ToString()'を呼び出す必要はありません。 – Luiso

+0

@Luiso厳密には、値型で 'ToString()'を呼び出すと、値をToStringする前に起こる可能性のあるボクシングであり、パフォーマンスにわずかに影響する可能性がある(無視できるが、技術的には同等ではない)。私はそれに同意する、私は 'ToString()'を個人的に削除するだろう。 –

+0

PadLeft/PadRightを使用した場合の問題は、最後のcoulmnは100の空白で埋める必要があり、100個のスペースを取らないことです。 – TRA

関連する問題