我需要使用字符串插值格式化变量,格式字符串是另一个变量:
这是我的示例代码:
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的确切语法是什么?
答案 0 :(得分:4)
您的代码相当于:
Console.WriteLine(String.Format("Test 2: {0:formatString}", i));
由于formatString
在格式字符串中,您将嵌套String.Format
调用以将值放入格式字符串中:
Console.WriteLine(String.Format(String.Format("Test 2: {{0:{0}}}", formatstring), i));
字符串插值不支持此功能。
答案 1 :(得分:2)
C#没有能够达到你想要的语法。
答案 2 :(得分:2)
你能做到这一点的最短路径'语法上'没有String.Format,正在使用ToString
:
$"Test 2: {i.ToString(formatString)}"
答案 3 :(得分:0)
字符串插值在编译阶段发生。因此,您无法在格式字符串中使用变量。
答案 4 :(得分:0)
我已经测试了这段代码,似乎有效:
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();
}
答案 5 :(得分:0)
您可以创建一个简单的扩展方法,该扩展方法允许您在任何对象上调用格式表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)}");