как вы можете сделать замену переменных там? как "a =" & someint & ","
Кристофер Махан
1
@Christopher - мне обычно удобнее помещать токены в строковую константу, а затем заменять их. Так s="... a=~someint~ ..."и тогда s=s.Replace("~someint~', SomeInt).
Херб Каудилл
Похоже, это не работает с динамической компиляцией: CodeDomProvider.CreateProvider ("VisualBasic"). CompileAssemblyFromFile (<параметры>, <.vb файл с указанным выше синтаксисом трюка в нем>) ... Есть идеи? Это только синтаксический сахар VS 2010?
Чад
1
@romkyns Не правда, я выяснил, как использовать CDATA и все еще иметь возможность вставлять, используя <% =%>. Смотрите здесь
Нельсон,
1
Потрясающие! Как сохранить отступ кода, не вводя его в литерал с более новым синтаксисом?
Panzercrisis
50
В VB.Net такой функции нет, и она не появится в Visual Studio 2010. Функция, которую упоминает jirwin, называется неявным продолжением строки. Это связано с удалением _ из многострочного оператора или выражения. Это устраняет необходимость завершать многострочную строку символом _, но в VB все еще нет многострочного строкового литерала.
Так как же это работает для литералов XML? Либо это возможно, либо литералы XML используют другой метод - и если другой метод, то тот, который может быть расширен до многострочных строк.
mellamokb
1
@mellamokb Литералы XML ... особенные из-за отсутствия лучшего слова. Компилятор понимает их и, следовательно, позволит им неявно занимать несколько строк. Такая поддержка не была добавлена для многострочных строк. Добавить такую поддержку намного проще, чем XML-литералы, просто она не соответствовала планке для этого выпуска.
JaredPar
38
Я использовал этот вариант:
Dim query AsString=<![CDATA[SELECT
a.QuestionID
FROM
CR_Answers a
INNER JOIN
CR_Class c ON c.ClassID = a.ClassID
INNER JOIN
CR_Questions q ON q.QuestionID = a.QuestionID
WHERE
a.CourseID =1AND
c.ActionPlan =1AND q.Q_Year ='11/12'AND q.Q_Term <=(SELECT CurrentTerm FROM CR_Current_Term)]]>.Value()
Многострочные строки доступны начиная с Visual Studio 2015.
Dim sql AsString="
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Вы можете комбинировать их с интерполяцией строк, чтобы максимизировать полезность:
Dim primaryKey AsString="ID"Dim inventoryTable AsString="inventory"Dim sql AsString=$"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Обратите внимание , что интерполированные строки начинаются с $и вы должны заботиться о ", {и }содержащиеся внутри - превратить их в "", {{или }}соответственно.
Здесь вы можете увидеть фактическую подсветку синтаксиса интерполированных частей приведенного выше примера кода:
Если вам интересно, работает ли их распознавание редактором Visual Studio с рефакторингом (например, массовое переименование переменных), то вы правы, рефакторинг кода работает с ними. Не говоря уже о том, что они также поддерживают IntelliSense, подсчет ссылок или анализ кода.
Строки VB теперь в основном совпадают со стенографическими строками C # - они не поддерживают escape-последовательности с обратной косой чертой, такие как \ n, и разрешают переводы строк внутри строки, и вы экранируете символ кавычки двойными кавычками ""
Спасибо Lucian за добавление многострочных строк в VB. Может быть, вы можете обновить свой ответ, потому что VS 2015 сейчас RTM. И, может быть, вы также можете ткнуть кого-нибудь в вашей компании, чтобы обновить соответствующую статью MSDN .
miroxlav
14
это была действительно полезная статья для меня, но никто не упомянул, как объединять, если вы хотите отправить некоторые переменные, что вам и нужно делать в 99% случаев.
... <% = переменная %> ...
Вот как вы это делаете:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
В этом случае вы хотите избежать конкатенации и вместо этого использовать параметры SQL, поскольку они лучше защищают от атак с использованием SQL-инъекций. Я вижу, что это полезно для динамического генерирования SQL, хотя (без передачи пользовательского ввода).
Чад Леви
10
Что ж, раз уж вы, кажется, знакомы с вашим питоном, я могу предложить вам скопировать ваш текст в python, например:
s="""this is gonna
last quite a
few lines"""
затем сделайте:
for i in s.split('\n'):
print 'mySB.AppendLine("%s")' % i# mySB.AppendLine("this is gonna")# mySB.AppendLine("last quite a")# mySB.AppendLine("few lines")
тогда, по крайней мере, вы можете скопировать это и вставить в свой код VB. Бонусные баллы, если вы связываете горячую клавишу (быстрее всего получить: Autohotkey ), чтобы сделать это для всего, что находится в буфере вставки. Та же идея хорошо работает для форматера SQL.
Многострочные строковые литералы в vb.net с использованием класса XElement.
Imports System.Xml.Linq
PublicSub Test()dim sOderBy asstring=""dim xe as XElement =<SQL>SELECT* FROM <%= sTableName %><ORDER_BY> ORDER BY <%= sOrderBy %></ORDER_BY></SQL>'** conditionally remove a section if sOrderBy.Length =0then xe.<ORDER BY>.Remove
'** convert XElement value to a string dim sSQL asString= xe.Value
EndSub
Для меня это самая раздражающая вещь о VB как о языке. Серьезно, я однажды написал строку в файле и написал что-то вроде кода:
Dim s asString= file_get_contents("filename.txt")
просто, чтобы я мог проверить запрос непосредственно на сервере SQL, если мне нужно.
Мой текущий метод состоит в том, чтобы использовать хранимую процедуру на SQL Server и просто вызывать ее, чтобы я мог передать параметры в запрос и т. Д.
Я выяснил, как использовать оба <! [CDATA [вместе с <% = для переменных, что позволяет вам кодировать без беспокойства.
По сути, вам нужно завершить теги CDATA перед переменной VB, а затем повторно добавить ее после, чтобы CDATA не захватывал код VB. Вам нужно обернуть весь блок кода в тег, потому что у вас будет несколько блоков CDATA.
Dim script AsString=<code><![CDATA[<script type="text/javascript">
var URL =']]><%= domain %><![CDATA[/mypage.html';</script>]]></code>.value
Вам нужно _ в конце строки для каждой "строки ..", которая выглядит ужасно.
Кендзи Ногучи,
2
На самом деле вы не делаете. Более поздние версии VB (2010 и более поздние, я думаю?) Не требуют _ во многих случаях, включая пример, показанный здесь.
Дэррил
2
Вы можете использовать XML для этого, как
dim vrstr asstring=<s>
some words
some words
some
words
</s>
Но пока не поддерживается R #. Хорошей новостью является то, что они будут поддерживаться в ближайшее время! Пожалуйста, проголосуйте за Youtrack, чтобы уведомить JetBrains, что они вам также нужны.
Это плохо. Вы только что создали 4 экземпляра строки
TS
Я унаследовал устаревший код VB6, который я должен перенести на VB.NET, который полон этих! :( В этом случае я предпочитаю жертвовать производительностью, чтобы сохранить читабельность.
Зак
Вам не нужно Вы всегда можете объединить, не переназначая переменную, и отформатировать в этих строках
TS
В моем случае неприменимо переключение на правильный синтаксис, так как я должен изменить полный пакет кода, и на проекте не осталось времени.
Зак
-1
Используйте vbCrLfили vbNewLine. Он работает с MessageBoxes и многими другими элементами управления, которые я тестировал.
Ответы:
Вы можете использовать XML Literals для достижения аналогичного эффекта:
Помните, что если у вас есть специальные символы, вы должны использовать блок CDATA:
ОБНОВЛЕНИЕ 2015:
Многострочные строковые литералы были введены в Visual Basic 14 (в Visual Studio 2015 ). Приведенный выше пример теперь можно записать так:
MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.
Подробности добавляются в репозиторий Roslyn New-Language-Features-in-VB-14 Github.
источник
s="... a=~someint~ ..."
и тогдаs=s.Replace("~someint~', SomeInt)
.В VB.Net такой функции нет, и она не появится в Visual Studio 2010. Функция, которую упоминает jirwin, называется неявным продолжением строки. Это связано с удалением _ из многострочного оператора или выражения. Это устраняет необходимость завершать многострочную строку символом _, но в VB все еще нет многострочного строкового литерала.
Пример для многострочной строки
Visual Studio 2008
Visual Studio 2010
источник
Я использовал этот вариант:
это позволяет <> в строке
источник
Многострочные строки доступны начиная с Visual Studio 2015.
Вы можете комбинировать их с интерполяцией строк, чтобы максимизировать полезность:
Обратите внимание , что интерполированные строки начинаются с
$
и вы должны заботиться о"
,{
и}
содержащиеся внутри - превратить их в""
,{{
или}}
соответственно.Здесь вы можете увидеть фактическую подсветку синтаксиса интерполированных частей приведенного выше примера кода:
Если вам интересно, работает ли их распознавание редактором Visual Studio с рефакторингом (например, массовое переименование переменных), то вы правы, рефакторинг кода работает с ними. Не говоря уже о том, что они также поддерживают IntelliSense, подсчет ссылок или анализ кода.
источник
Многострочные строковые литералы представлены в Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884.
Вы можете использовать его в предварительном просмотре VS2015, прямо сейчас - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (обратите внимание, что вы все еще можете использовать VS2015 даже при нацеливании на более старые версия .NET Framework)
Строки VB теперь в основном совпадают со стенографическими строками C # - они не поддерживают escape-последовательности с обратной косой чертой, такие как \ n, и разрешают переводы строк внутри строки, и вы экранируете символ кавычки двойными кавычками ""
источник
это была действительно полезная статья для меня, но никто не упомянул, как объединять, если вы хотите отправить некоторые переменные, что вам и нужно делать в 99% случаев.
... <% = переменная %> ...
Вот как вы это делаете:
<SQL> SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>' </SQL>.Value
источник
Что ж, раз уж вы, кажется, знакомы с вашим питоном, я могу предложить вам скопировать ваш текст в python, например:
затем сделайте:
или
тогда, по крайней мере, вы можете скопировать это и вставить в свой код VB. Бонусные баллы, если вы связываете горячую клавишу (быстрее всего получить: Autohotkey ), чтобы сделать это для всего, что находится в буфере вставки. Та же идея хорошо работает для форматера SQL.
источник
Многострочные строковые литералы в vb.net с использованием класса XElement.
источник
Для меня это самая раздражающая вещь о VB как о языке. Серьезно, я однажды написал строку в файле и написал что-то вроде кода:
просто, чтобы я мог проверить запрос непосредственно на сервере SQL, если мне нужно.
Мой текущий метод состоит в том, чтобы использовать хранимую процедуру на SQL Server и просто вызывать ее, чтобы я мог передать параметры в запрос и т. Д.
источник
Я выяснил, как использовать оба <! [CDATA [вместе с <% = для переменных, что позволяет вам кодировать без беспокойства.
По сути, вам нужно завершить теги CDATA перед переменной VB, а затем повторно добавить ее после, чтобы CDATA не захватывал код VB. Вам нужно обернуть весь блок кода в тег, потому что у вас будет несколько блоков CDATA.
источник
Вы можете (должны?) Поместить строку в файл ресурсов (например, «Мой проект» / Ресурсы), а затем получить ее с помощью
источник
Отказ от ответственности: я люблю питона. Это многострочные строки только одна причина.
Но я также делаю VB.Net, так что вот мой краткий путь для более удобочитаемых длинных строк.
источник
Вы можете использовать XML для этого, как
источник
в Visual Studio 2010 (VB NET) я пытаюсь следующее и работает нормально
источник
Доступно в Visual Basic 14 как часть Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Но пока не поддерживается R #. Хорошей новостью является то, что они будут поддерживаться в ближайшее время! Пожалуйста, проголосуйте за Youtrack, чтобы уведомить JetBrains, что они вам также нужны.
источник
Если вам нужен XML-литерал в VB.Net с переменной строкового кода, вот как вы это сделаете:
источник
Вы также можете использовать
System.Text.StringBuilder
класс таким образом:Затем вы получите многострочную строку, используя:
источник
Поскольку это проблема читабельности, я использовал следующий код:
источник
Используйте
vbCrLf
илиvbNewLine
. Он работает с MessageBoxes и многими другими элементами управления, которые я тестировал.Он покажет два идентичных MessageBox с двумя строками.
источник
Нет, в VB.NET такой функции еще нет. Это будет доступно в следующей итерации VB (Visual Basic 10), однако ( ссылка )
источник
если это похоже на C # (у меня не установлен VB.Net), вы можете поставить строку с префиксом @
это также полезно для таких вещей, как @ "C: \ Windows \ System32 \" - оно по существу отключает экранирование и включает многострочное.
источник