Ответ 1
Нет, вы должны использовать знак подчеркивания, но я считаю, что VB.NET 10 позволит использовать несколько строк без подчеркивания, требуя, если он не сможет понять, где должен быть конец.
Есть ли способ иметь оператор через несколько строк без символа подчеркивания?
Это очень раздражает в многострочных строках, таких как инструкции SQL, и особенно запросы LINQ.
Помимо уродства и сложности при изменении строки (ничего больше нет), вы не можете использовать комментарии в середине многострочного оператора.
Примеры моего ежедневного личного ада.
dim results = from a in articles _
where a.articleID = 4 _ ' articleID - Nope, can't do this
select a.articleName
dim createArticle as string = _
"Create table article " & _
" (articleID int " & _
" ,articleName varchar(50) " & _
" )"
Нет, вы должны использовать знак подчеркивания, но я считаю, что VB.NET 10 позволит использовать несколько строк без подчеркивания, требуя, если он не сможет понять, где должен быть конец.
Для большинства многострочных строк, использующих элемент XML с внутренним блоком CDATA, проще избежать необходимости избегать чего-либо для простых исходных данных строки.
Dim s as string = <s><![CDATA[Line 1
line 2
line 3]]></s>.Value
Обратите внимание, что я видел, что многие люди указывают один и тот же формат, но без тега "<s> " (только блок CDATA), но визуальная студия Автоматические форматирующие швы для изменения ведущего пробела каждой строки. Я думаю, что это связано с структурой наследования объектов за объектами Linq "X". CDATA не является "контейнером", внешним блоком является XElement, который наследуется от XContainer.
Я скажу "нет".
Но единственным доказательством, которое у меня есть, является личный опыт и тот факт, что документация по продолжению строки не имеет в ней ничего.
http://msdn.microsoft.com/en-us/library/aa711641(VS.71).aspx
Нет, символ подчеркивания является единственным символом продолжения. Лично я предпочитаю случайное использование символа продолжения, чтобы быть вынужденным использовать его всегда, как в С#, но, помимо проблемы с комментариями (что, я согласен, иногда вызывает раздражение), получение элементов в очереди не является проблемой.
В VS2008, во всяком случае, просто выберите вторую и следующие строки, несколько раз нажмите клавишу вкладок и перемещайте всю ее часть.
Если это слишком мало, вы можете удалить лишнее пространство персонажа за раз. Это немного нерешительно, но он остается включенным после его спасения.
В редких случаях, когда это недостаточно, я иногда использую следующий метод, чтобы все это выстроить:
dim results as String = ""
results += "from a in articles "
results += "where a.articleID = 4 " 'and now you can add comments
results += "select a.articleName"
Это не идеально, и я знаю тех, кто предпочитает С#, будет tut-tutting, но это так. Это выбор стиля, но я по-прежнему предпочитаю его бесконечным полуколонам.
Теперь я просто жду, когда кто-нибудь скажет мне, что я должен был использовать StringBuilder; -)
Не уверен, что вы можете сделать это с помощью многострочного кода, но можно сделать многострочные переменные:
Вот соответствующий фрагмент:
Я выяснил, как использовать как <! [CDATA [вместе с <% = для переменных, что позволяет вам без проблем создавать код.
В основном вы должны прервать теги CDATA перед переменной VB, а затем повторно добавить их после того, как CDATA не будет записывать код VB. Вам нужно обернуть весь блок кода в тег, потому что у вас будет несколько блоков CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Начиная с VB.NET 10, поддерживается неявное продолжение строки для ряда синтаксических элементов (см. Заявления в Visual Basic: продолжение оператора над несколькими строками). Оператор конкатенации (&) находится в списке элементов синтаксиса, которые поддерживают неявное продолжение линии. Также поддерживаются комментарии Interspersed, поэтому ваш второй пример можно переписать как:
dim createArticle as string =
"Create table article " &
" (articleID int " & ' Comment for articleID
" ,articleName varchar(50) " & ' Comment for articleName
" )"
Неявное продолжение строки также работает для операторов запросов с несколькими ограничениями:
Операторы до и после запроса (Агрегат, Отличительные, От, Группа, Группа Присоединяйтесь, Присоединиться, , Заказать, Выбрать, Пропустить. > , Пропустить пока, Возьмите, Взять, Где, В, В, Вкл, Восходящий и Снижение). Вы не можете разбить строку между ключевыми словами операторов запросов, состоящими из нескольких ключевых слов ( Заказ, Присоединиться к группе, Взять и Пропустить пока).
Опять же, вкрапленные комментарии разрешены, поэтому ваш первый пример можно переписать как:
dim results = from a in articles
where a.articleID = 4 ' articleID - now perfectly legal
select a.articleName
Вы можете использовать XML-литералы, чтобы сделать это:
Dim s = <sql>
Create table article
(articleID int -- sql comment
,articleName varchar(50) <comment text="here an xml comment" />
)
</sql>.Value
предупреждение: применяются текстовые правила XML, например & для амперсанда, & lt; для <, и т.д.
Dim alertText = "Hello World"
Dim js = <script>
$(document).ready(function() {
alert('<%= alertText %>');
});
</script>.ToString 'instead of .Value includes <script> tag
Примечание: вышеупомянутое проблематично, когда оно содержит символы, которые необходимо экранировать. Лучше использовать "<script>"+js.Value+"</script>"
Я знаю, что у этого есть принятый ответ, но это верхняя статья, которую я нашел при поиске этого вопроса, и это очень устарело. Я сделал немного больше исследований, и эта статья MSDN содержит список элементов синтаксиса, которые неявно продолжают утверждение в следующей строке кода для VB.NET 2010.