2016-09-16 31 views
0

我想在循環中使用String.Format,但它不允許我在String.Format中定義變量i。這裏是我的代碼如何在String.Format中使用變量

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

這應該表明什麼?你是否試圖打印'i',然後是'myObj [i]'? – itsme86

+0

我正在嘗試生成固定寬度的文件。我是數組對象的索引或列 – TRA

+0

這將會崩潰,因爲'<='應該是'!='或'<'。 – dasblinkenlight

回答

4

要在Format方法使用它,您可以使用對應的參數數組的索引號。

另外,不要重新分配Sb,只需撥打AppendAppendFormat

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

如果你足夠幸運地獲得最新和最偉大的C#版本,你可以跳過Format並用它做新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的問題是,最後一個庫侖需要填充100的空格,並且不佔用100個空格,只需要8個空格。 – TRA