Подтвердить что ты не робот

Единый оператор для нескольких строк в VB.NET без символа подчеркивания

Есть ли способ иметь оператор через несколько строк без символа подчеркивания?

Это очень раздражает в многострочных строках, таких как инструкции 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) " & _
    "    )"
4b9b3361

Ответ 1

Нет, вы должны использовать знак подчеркивания, но я считаю, что VB.NET 10 позволит использовать несколько строк без подчеркивания, требуя, если он не сможет понять, где должен быть конец.

Ответ 2

Для большинства многострочных строк, использующих элемент XML с внутренним блоком CDATA, проще избежать необходимости избегать чего-либо для простых исходных данных строки.

Dim s as string = <s><![CDATA[Line 1
line 2
line 3]]></s>.Value

Обратите внимание, что я видел, что многие люди указывают один и тот же формат, но без тега "<s> " (только блок CDATA), но визуальная студия Автоматические форматирующие швы для изменения ведущего пробела каждой строки. Я думаю, что это связано с структурой наследования объектов за объектами Linq "X". CDATA не является "контейнером", внешним блоком является XElement, который наследуется от XContainer.

Ответ 3

Я скажу "нет".

Но единственным доказательством, которое у меня есть, является личный опыт и тот факт, что документация по продолжению строки не имеет в ней ничего.

http://msdn.microsoft.com/en-us/library/aa711641(VS.71).aspx

Ответ 4

Нет, символ подчеркивания является единственным символом продолжения. Лично я предпочитаю случайное использование символа продолжения, чтобы быть вынужденным использовать его всегда, как в С#, но, помимо проблемы с комментариями (что, я согласен, иногда вызывает раздражение), получение элементов в очереди не является проблемой.

В 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; -)

Ответ 5

Не уверен, что вы можете сделать это с помощью многострочного кода, но можно сделать многострочные переменные:

Многострочные строки в VB.NET

Вот соответствующий фрагмент:

Я выяснил, как использовать как <! [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

Ответ 6

Начиная с 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

Ответ 7

Вы можете использовать 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>"

Ответ 8

Я знаю, что у этого есть принятый ответ, но это верхняя статья, которую я нашел при поиске этого вопроса, и это очень устарело. Я сделал немного больше исследований, и эта статья MSDN содержит список элементов синтаксиса, которые неявно продолжают утверждение в следующей строке кода для VB.NET 2010.