c#字符串插值变量格式

本文关键字:格式 变量 插值 字符串 | 更新日期: 2023-09-27 18:11:09

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

下面是我的示例代码:
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无效

Test 2的语法是什么?

c#字符串插值变量格式

最简单的方法就是在语法上不使用String。格式,是使用ToString:

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

你的代码相当于:

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

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

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

不支持字符串插值

c#没有你想要的语法

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

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();
}

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

您可以创建一个简单的扩展方法,允许您在任何对象上调用可格式化的ToString方法。IFormattable接口与string.Format或内插字符串用于格式化未知类型对象的方式相同。

public static string ToString(this object value, string format, IFormatProvider provider = null)
    => (value as IFormattable)?.ToString(format, provider) ?? value.ToString();

使用:

object i = 12345;
var formatString = "N5";
Console.WriteLine($"Test 2: {i.ToString(formatString)}");