如何在String.Format中使用变量

问题描述:

我想在循环中使用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

要在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