VB.NET中多行的单个语句,没有下划线字符

时间:2009-01-20 15:18:29

标签: 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) " & _
    "    )"

8 个答案:

答案 0 :(得分:39)

不,你必须使用下划线,但我相信VB.NET 10将允许多行没有下划线,只要它无法找出最终应该在哪里。

答案 1 :(得分:5)

对于大多数使用带有内部CDATA块的XML元素的多行字符串,更容易避免为简单的原始字符串数据转义任何内容。

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

请注意,我看过很多人说的格式相同,但没有包装“&lt; s&gt;” tag(只是CDATA块)但是visual studio自动格式化接缝以改变每行的前导空格。 我认为这是由于Linq“X”对象背后的对象继承结构。 CDATA不是“容器”,外部块是继承自XContainer的XElement。

答案 2 :(得分:4)

我会说不。

但我唯一的证据就是个人经验以及线上延续的文件中没有任何其他内容。

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

答案 3 :(得分:2)

从VB.NET 10开始,许多语法元素都支持隐式行继续(参见Statements in Visual Basic: Continuing a Statement over Multiple Lines)。连接运算符(&amp;)位于语法元素列表中,支持隐式行继续。也支持散布的注释,因此您的第二个示例可以重写为:

dim createArticle as string = 
    "Create table article " &
    "    (articleID int " &           ' Comment for articleID
    "    ,articleName varchar(50) " & ' Comment for articleName
    "    )"

隐式行继续也适用于查询运算符,但有一些限制:

  

查询运算符之前和之后(汇总区别来自分组依据组加入加入排序选择跳过跳过接受接受在哪里,< strong>进入,开启升序降序)。您不能在由多个关键字组成的查询运算符的关键字之间划分界线(排序依据分组加入随时取消,以及跳过)。

同样,允许穿插注释,因此您的第一个示例可以重写为:

dim results = from a in articles
              where a.articleID = 4  ' articleID - now perfectly legal
              select a.articleName

答案 4 :(得分:1)

不,下划线是唯一的延续角色。就个人而言,我更喜欢偶尔使用延续字符来强制使用它,就像在C#中一样,但除了评论问题(我同意这有点令人讨厌)之外,让事情排成一行不是问题。

无论如何使用VS2008,只需选择第二行和后续行,多次点击Tab键,它就会移动整个地段。

如果它太过分了,你可以一次删除一个字符的多余空格。它有点繁琐,但一旦保存就会保持不变。

在极少数这种情况不够好的情况下,我有时会使用以下技术来排队:

dim results as String = ""
results += "from a in articles "
results += "where a.articleID = 4 " 'and now you can add comments
results += "select a.articleName"

这并不完美,而且我知道那些喜欢C#的人会啧啧称奇,但事实确实如此。这是一种风格选择,但我仍然喜欢无尽的冒号。

现在我只是在等人告诉我应该使用StringBuilder; - )

答案 5 :(得分:1)

我知道这有一个公认的答案,但它是我在搜索这个问题时找到的顶级文章,现在它已经过时了。我做了一些研究,this MSDN article包含一个语法元素列表,隐含地继续声明VB.Net 2010的下一行代码。

答案 6 :(得分:1)

不确定是否可以使用多行代码执行此操作,但可以执行多行变量:

Multiline strings in VB.NET

以下是相关的块:

我想出了如何同时使用&lt;![CDATA [以及&lt;%= for variables,这使您可以毫无顾虑地进行编码。

您基本上必须在VB变量之前终止CDATA标记,然后在CDATA不捕获VB代码之后重新添加它。您需要将整个代码块包装在一个标记中,因为您将拥有多个CDATA块。

Dim script As String = <code><![CDATA[
  <script type="text/javascript">
    var URL = ']]><%= domain %><![CDATA[/mypage.html';
  </script>]]>
</code>.value

答案 7 :(得分:0)

您可以使用XML文字进行排序:

Dim s = <sql>
  Create table article
  (articleID int  -- sql comment
  ,articleName varchar(50)  <comment text="here's an xml comment" />
  )
</sql>.Value

警告:适用XML文本规则,例如&amp; amp;用于&符号,&amp; lt; for&lt;,etc。

Dim alertText = "Hello World"
Dim js = <script>
          $(document).ready(function() {
           alert('<%= alertText %>');
          });
         </script>.ToString  'instead of .Value includes <script> tag

注意:当包含需要转义的字符时,上述内容会出现问题。最好使用"<script>"+js.Value+"</script>"