有没有办法在没有下划线字符的情况下跨越多行?
在多行字符串(例如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) " & _
" )"
答案 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)
答案 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)
不确定是否可以使用多行代码执行此操作,但可以执行多行变量:
以下是相关的块:
我想出了如何同时使用&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>"