String.Format () - Как использовать переменную, которая содержит ваше форматирование? - PullRequest
0 голосов
/ 11 июля 2019

В vb.net я пытаюсь отформатировать строку в отформатированный номер телефона, где форматирование считывается из переменной базы данных.

Номер телефона, например "5555555555", будет преобразован в "(555) 555-5555", если строка отформатирована следующим образом:

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

Однако строка "(###) ### - ####" хранится в базе данных, чтобы обеспечить централизованный выбор форматирования телефонных номеров в теоретической системе.

Кто-нибудь знает, как я могу заменить это жестко закодированное форматирование на переменное? Я пытаюсь что-то вроде:

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

К сожалению, это возвращает только саму строку. Мне предлагают "(###) ### - ####".

1 Ответ

2 голосов
/ 11 июля 2019

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(), иначе # в вашем формате не будут знать, над чем работать.

...