Использование левых двойных кавычек в строках в VB

В следующем коде использование строки """ (т.е. левая двойная кавычка внутри строки) приводит к ошибке компиляции в VB.NET:

StringVar = Replace(StringVar, """, "“")

Что происходит здесь?

Ответы

Ответ 1

Кажется, что вы хотите заменить фигурные кавычки эквивалентом их кода HTML.

С первого взгляда ваш код абсолютно прав. Проблема заключается в том, что VB разрешает фигурные кавычки вместо обычных котировок в коде (потому что Unicode отлично, не так ли?). То есть, следующие коды эквивалентны:

Dim str = "hello"
Dim str = "hello"
Dim str = "hello"

Теперь, если вы хотите использовать кавычку внутри строки, VB не знает, должна ли кавычка заканчивать строку или нет. В С# это было бы исправлено путем экранирования кавычки, т.е. Вместо """ youd write "\"". В VB то же самое делается путем удвоения значения кавычки, т.е. """".

Вернемся к твоей фигурной цитате. То же, что и для прямых котировок, применяется в соответствии со спецификацией языка VB (¶1.6.4). Чтобы написать курсорную цитату в коде, попробуйте следующее:

StringVar = Replace(StringVar, """", "“")

К сожалению, я не могу попробовать этот код сейчас и его вполне возможно, что среда IDE просто заменяет это прямыми кавычками. Если это так, альтернативой является использование Chr или ChrW с символьным кодом "левой двойной кавычки":

StringVar = Replace(StringVar, ChrW(&H201C), "“")

Или, для симметрии, написанной в десятичной форме (но я предпочитаю шестнадцатеричный код символа):

StringVar = Replace(StringVar, ChrW(8220), "“")

Что-то еще: функция Replace, вероятно, скоро будет устанавлена ​​и не работает везде (например, Windows Phone 7). Вместо этого используйте метод Replace класса String:

StringVar = StringVar.Replace(, ChrW(8220), "“")

Ответ 3

Похоже, вы ищете ChrW функцию в пространстве имен Microsoft.VisualBasic, которое используется для преобразования код символа Юникода в фактический символ.

Если вы пытаетесь заменить прямые кавычки в строке кудрявыми кавычками, попробуйте следующий код:

'Declare a string that uses straight quotes
Dim origString As String = "This string uses ""quotes"" around a word."

'Create a new string by replacing the straight quotes from the original string
'with left-facing curly quotes
Dim newString As String = origString.Replace("""", ChrW(8220))

'Display the result
MessageBox.Show(newString)

Или, если вы пытаетесь закодировать фигурные кавычки слева в строке, заменив их альтернативной нотацией (если предположить, что вы правильно использовали вопрос), попробуйте следующий код:

'Declare a string that uses left-facing curly quotes
Dim origString As String = "This string uses fancy " & ChrW(8220) & _
                           "quotes" & ChrW(8220) & " around a word."

'Create a new string by replacing the curly quotes with an arbitrary string
Dim newString As String = origString.Replace(ChrW(8220), "“")

'Display the result
MessageBox.Show(newString)