C#字符串插值,格式可变

Bra*_*ing 6 c#

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

这是我的示例代码:

static void Main(string[] args)
{
    int i = 12345;

    Console.WriteLine($"Test 1: {i:N5}");

    var formatString = "N5";

    Console.WriteLine($"Test 2: {i:formatString}");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ald*_*cor 8

在没有 String.Format 的情况下,您可以通过“语法”执行此操作的最短方法是使用ToString

$"Test 2: {i.ToString(formatString)}"
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 5

您的代码等效于:

Console.WriteLine(String.Format("Test 2: {0:formatString}", i));
Run Code Online (Sandbox Code Playgroud)

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

Console.WriteLine(String.Format(String.Format("Test 2: {{0:{0}}}", formatstring), i));
Run Code Online (Sandbox Code Playgroud)

字符串插值不支持此功能。

  • 有趣的是,可以通过半插值和半字符串格式来完成。`Console.WriteLine($“ Test 2:{{0:{formatString}}}”,i);` (3认同)
  • @user2289427:我建议您使用 `ToString` 来格式化值:`$"Test 2: {i.ToString(formatString)}"`。 (2认同)

Sam*_*nen 0

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

  • @SLaks 它可以做任何事情,但事实并非如此。更好的答案是“因为它就是这样做的”吗? (2认同)