[英]C# string interpolation with variable format
我需要用字符串插值格式化一個變量,格式字符串是另一個變量:
這是我的示例代碼:
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 的確切語法是什么?
您的代碼相當於:
Console.WriteLine(String.Format("Test 2: {0:formatString}", i));
由於formatString
在格式字符串中,您可以嵌套String.Format
調用以將值放入格式字符串中:
Console.WriteLine(String.Format(String.Format("Test 2: {{0:{0}}}", formatstring), i));
字符串插值不支持此操作。
在沒有 String.Format 的情況下,您可以在“語法上”執行此操作的最短方法是使用ToString
:
$"Test 2: {i.ToString(formatString)}"
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)}");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.