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的语法是什么?
最简单的方法就是在语法上不使用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)}");