具有可变格式的C#字符串插值

我需要使用字符串插值格式化变量,格式字符串是另一个变量:

这是我的示例代码:

static void Main(string[] args) { int i = 12345; Console.WriteLine($"Test 1: {i:N5}"); var formatString = "N5"; Console.WriteLine($"Test 2: {i:formatString}"); } 

测试1工作,测试2不起作用。

测试2的确切语法是什么?

您的代码相当于:

 Console.WriteLine(String.Format("Test 2: {0:formatString}", i)); 

由于formatString是格式字符串,您将嵌套String.Format调用以将值放入格式字符串中:

 Console.WriteLine(String.Format(String.Format("Test 2: {{0:{0}}}", formatstring), i)); 

字符串插值不支持此function。

C#没有可以执行您想要的语法。

在没有String.Format的情况下,你可以在语法上做到这一点的最短方法是使用ToString

 $"Test 2: {i.ToString(formatString)}" 

字符串插值在编译阶段发生。 因此,您无法在格式字符串中使用变量。

我测试了这段代码,它似乎工作:

 static void Main(string[] args) { int i = 12345; Console.WriteLine("Test 1: {0:N5}",i); var formatString = "N5"; Console.WriteLine("Test 2: {0:" + formatString + "}", i); Console.ReadLine(); }