String.Format() - 如何使用包含格式的变量?

String.Format() - How to use a variable that contains your formatting?

在 vb.net 中,我试图将字符串格式化为格式化的 Phone 数字,其中格式是从数据库变量中读取的。

如果字符串以这种方式格式化,phone 数字如“5555555555”将被很好地格式化为“(555) 555-5555”:

String.Format("{0:(###) ###-####}", Long.Parse(PhoneNum))

但是,“(###) ###-####”字符串存储在数据库中,以维护理论系统中 phone 数字的中央格式选择。

有谁知道如何用变量替换这种硬编码格式?我正在尝试类似的东西:

Dim phoneFormat as String = <~read in the String format from DB~>
String.Format("{0:" & phoneFormat.ToString & "}", Long.Parse(PhoneNum)))

然而不幸的是,这只是 returns 字符串本身。我看到“(###) ###-####”。

Object.ToString 可能更简单,但您仍然可以使用 String.Format。下面是这两种方法

Dim phoneNum = "1234567890"
Dim phoneFormat = "(###) ###-####"
' simpler version using Long.ToString
Dim formattedPhoneNumber1 = Long.Parse(phoneNum).ToString(phoneFormat)
' your original attempt using String.Format
Dim formattedPhoneNumber2 = String.Format("{0:" & phoneFormat & "}", Long.Parse(phoneNum))
' cleaner version using String.Format with traditional interpolation and $ interpolation
Dim formattedPhoneNumber3 = String.Format($"{{0:{phoneFormat}}}", CLng(phoneNum))
Console.WriteLine(formattedPhoneNumber1)
Console.WriteLine(formattedPhoneNumber2)
Console.WriteLine(formattedPhoneNumber3)
Console.ReadLine()

(123) 456-7890
(123) 456-7890
(123) 456-7890

我认为您可能没有将 Long 发送到函数中,而是将字符串发送到函数中(顺便说一句,为什么数字 5555555555 首先被存储为字符串?)。您需要包含 Long.Parse() 否则格式中的 # 将不知道要操作什么。