格式化字符串没有string.Format?

时间:2012-10-26 13:32:22

标签: c# string.format

我添加了int类型的变量,我用它来调用类似的东西:

x.ToString("0000");

我将x更改为string,现在上述内容无效。是现在格式化x的唯一方法:

string.Format("{0:0000}",x);

还是有捷径?

我使用StringBuilder来构建字符串,这同样适用于AppendFormat吗?

7 个答案:

答案 0 :(得分:3)

您不能像操作数字一样格式化字符串,因此如果要对字符串应用数字格式,则必须先将其解析为数字:

Int32.Parse(x).ToString("0000")

答案 1 :(得分:1)

没有真正的捷径。

Int32没有关于int应该有多少前导零的概念。

通过格式化为字符串,您正在做正确的事情。如果您使用它来显示内容,那么它应该不是问题(如果您想执行数字操作,您仍然有x。)

AppendFormat的工作方式与string.Format类似,但会附加到调用它的StringBuilder对象上。

答案 2 :(得分:1)

不幸的是,这是最好的方法。请记住,每种类型都有自己的ToString方法,可以覆盖它。 int类型的ToString允许您在转换为字符串时传递格式以格式化整数。 DateTime也很相似。但是,字符串类型的ToString仅返回字符串,因为源已经是字符串类型。要格式化字符串,必须调用string.Format。

答案 3 :(得分:0)

没有

您必须将整数的字符串表示形式转换为实际的整数,以便可以使用所需的前导零数正确格式化。

如果字符串已经是那种格式,你为什么需要重新格式化呢?

答案 4 :(得分:0)

MSDN使用说明符显示了一些方法:http://msdn.microsoft.com/en-us/library/fzeeb5cd.aspx#Y759

示例

x.ToString("G");

此链接列出了所有格式选项:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

答案 5 :(得分:0)

x.PadLeft(4, '0'); 

会提供与

相同的结果
x.ToString("0000"); 

前提是x仍然是一个数字(它是string,因此如果没有TryCast()的话,就无法确定这一点。

答案 6 :(得分:0)

使用字符串插值(从 C# 6 开始)。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

{<interpolationExpression>[,<alignment>][:<formatString>]}

以你的例子:

$"{x:0000}"