Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используется для создания строк. Интерполированная строка выглядит как строка шаблона, содержащая интерполированные выражения. Интерполированная строка возвращает строку, которая заменяет интерполированные выражения, содержащиеся в ней, их строковыми представлениями. Эта функция доступна в Visual Basic 14 и более поздних версиях.
Аргументы интерполированной строки проще понять, чем составную строку форматирования. Например, следующая интерполированная строка содержит два интерполированных выражения и {name}
{hours:hh}
:
Console.WriteLine($"Name = {name}, hours = {hours:hh}")
Эквивалентная строка составного формата:
Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)
Структура интерполированной строки:
$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."
Где:
field-width
— целое число со знаком, указывающее количество символов в поле. Если значение положительное, поле выровнено по правому краю; если отрицательное, по левому краю.format-string
— это строка формата, соответствующая типу отформатированного объекта. Например, для DateTime значения это может быть стандартная строка формата даты и времени , например "D" или "d".
Это важно
Между $
и "
, начинающим строку, не должно быть пробелов. Это приводит к ошибке компилятора.
Интерполированную строку можно использовать в любом месте, где можно использовать строковый литерал. Интерполированная строка вычисляется каждый раз при выполнении кода с интерполированной строкой. Это позволяет разделить определение и оценку интерполированной строки.
Чтобы включить фигурную скобку ("{" или "}") в интерполированную строку, используйте две фигурные скобки, "{" или "}}". Дополнительные сведения см. в разделе "Неявные преобразования".
Если в интерполированной строке содержатся другие символы с особым значением, такие как кавычки ("), двоеточие (:) или запятая (,), они должны быть экранированы, если они встречаются в буквальном тексте. Или, если они относятся к элементам языка, включенным в интерполированное выражение, они должны быть включены в выражение, разделенное скобками. Следующий пример экранирует кавычки, чтобы включить их в результируемую строку:
Public Module Example
Public Sub Main()
Dim name = "Horace"
Dim age = 34
Dim s1 = $"He asked, ""Is your name {name}?"", but didn't wait for a reply."
Console.WriteLine(s1)
Dim s2 = $"{name} is {age:D3} year{If(age = 1, "", "s")} old."
Console.WriteLine(s2)
End Sub
End Module
' The example displays the following output:
' He asked, "Is your name Horace?", but didn't wait for a reply.
' Horace is 034 years old.
Неявные преобразования
Существует три неявных преобразования типов из интерполированной строки:
Преобразование интерполированной строки в объект String. В следующем примере возвращается строка, в которой интерполированные строковые выражения заменены их строковыми представлениями. Рассмотрим пример.
Public Module Example Public Sub Main() Dim name = "Bartholomew" Dim s1 = $"Hello, {name}!" Console.WriteLine(s1) End Sub End Module ' The example displays the following output: ' Hello, Bartholomew! ' </Snippet1>
Это окончательный результат интерпретации строки. Все вхождения двойных фигурных скобок ("{{" и "}}") преобразуются в одну фигурную скобку.
Преобразование интерполированной строки IFormattable в переменную, которая позволяет создавать несколько результирующих строк с культураспецифичным содержимым из одного IFormattable экземпляра. Это полезно для включения таких вещей, как правильные числовые и датовые форматы для конкретных культур. Все вхождения двойных фигурных фигурных скобок ("{" и "}}") остаются как двойные фигурные скобки, пока не будет отформатирована строка путем явного или неявного вызова ToString() метода. Все содержащиеся выражения интерполяции преобразуются в {0}, {1} и т. д.
В следующем примере используется отражение для отображения элементов, а также значений полей и свойств переменной IFormattable , созданной из интерполированной строки. Он также передает IFormattable переменную методу Console.WriteLine(String) .
Imports System.Globalization Imports System.Reflection Public Module Example Public Sub Main() Dim price = 1000 Dim s2 As IFormattable = $"The cost of this item is {price:C}." ShowInfo(s2) CultureInfo.CurrentCulture = New CultureInfo("en-US") Console.WriteLine(s2) CultureInfo.CurrentCulture = New CultureInfo("fr-FR") Console.WriteLine(s2) End Sub Private Sub ShowInfo(obj As Object) Console.WriteLine($"Displaying member information:{vbCrLf}") Dim t = obj.GetType() Dim flags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.NonPublic For Each m In t.GetMembers(flags) Console.Write($" {m.Name} {m.MemberType}") If m.MemberType = MemberTypes.Property Then Dim p = t.GetProperty(m.Name, flags) Console.Write($" Value: {p.GetValue(obj)}") End If If m.MemberType = MemberTypes.Field Then Dim f = t.GetField(m.Name, flags) Console.Write($" Value: {f.GetValue(obj)}") End If Console.WriteLine() Next Console.WriteLine($"-------{vbCrLf}") End Sub End Module ' The example displays the following output: Displaying member information: ' get_Format Method ' GetArguments Method ' get_ArgumentCount Method ' GetArgument Method ' ToString Method ' System.IFormattable.ToString Method ' ToString Method ' Equals Method ' GetHashCode Method ' GetType Method ' Finalize Method ' MemberwiseClone Method ' .ctor Constructor ' Format Property Value: The cost of this item is {0:C}. ' ArgumentCount Property Value: 1 ' _format Field Value: The cost of this item is {0:C}. ' _arguments Field Value: System.Object[] ' ------- ' ' The cost of this item is $1,000.00. ' The cost of this item is 1 000,00 €. ' </Snippet1>
Обратите внимание, что интерполированная строка может проверяться только с помощью отражения. Если он передается методу форматирования строк, например WriteLine(String), его элементы форматирования разрешаются, а строка результата возвращается.
Преобразование интерполированной строки в FormattableString переменную, представляющую составную строку формата. Проверка строки составного формата и способов отрисовки в виде результирующих строк, например, помогает защититься от атаки на внедрение, если вы создаете запрос. Также FormattableString включает в себя:
- Перегрузка ToString(), создающая результативную строку для CurrentCulture.
- Метод Invariant , который создает строку для InvariantCulture.
- ToString(IFormatProvider) Метод, который создает строку результата для указанного языка и региональных параметров.
Все вхождения двойных фигурных скобок ("{{" и "}}") остаются как двойные фигурные скобки до форматирования. Все содержащиеся выражения интерполяции преобразуются в {0}, {1} и т. д.
Imports System.Globalization Public Module Example Public Sub Main() Dim name = "Bartholomew" Dim s3 As FormattableString = $"Hello, {name}!" Console.WriteLine($"String: '{s3.Format}'") Console.WriteLine($"Arguments: {s3.ArgumentCount}") Console.WriteLine($"Result string: {s3}") End Sub End Module ' The example displays the following output: ' String: 'Hello, {0}!' ' Arguments: 1 ' Result string: Hello, Bartholomew!