具有可变格式的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(); }