VB.NET 中的多行字符串

有没有一种方法可以在 VB.NET 中使用多行字符串,比如 Python

a = """
multi
line
string
"""

还是 PHP?

$a = <<<END
multi
line
string
END;

当然不是

"multi" & _
"line
158729 次浏览

不,VB.NET 还没有这样的特性。它将在 VB 的下一个迭代中提供(可视化基础10) ,但是(链接)

如果它像 C # (我没有安装 VB.Net) ,你可以在字符串前面加上@

foo = @"Multiline
String"

这对于像@“ C: Windows System32”这样的东西也很有用——它实际上关闭了转义并打开了多行。

Net 没有这样的特性,它将在 Visual Studio 2010中提供 没有。Jirwin 所指的特征称为隐式线延拓。它必须从多行语句或表达式中删除 _。这确实消除了使用 _ 终止多行字符串的需要,但是在 VB 中仍然没有多行字符串文字。

多行字符串示例

VisualStudio2008

Dim x = "line1" & vbCrlf & _
"line2"

Visual Studio 2010

Dim x = "line1" & vbCrlf &
"line2"

你可以使用 < a href = “ https://msdn.microsoft.com/en-us/library/bb384629.aspx”rel = “ noReferrer”> XML Literals 来达到类似的效果:

Imports System.XML
Imports System.XML.Linq
Imports System.Core


Dim s As String = <a>Hello
World</a>.Value

请记住,如果有特殊字符,应该使用 CDATA 块:

Dim s As String = <![CDATA[Hello
World & Space]]>.Value

2015年更新:

VisualBasic14中(在 Visual Studio 2015中)引入了多行字符串文字:

Dim s As String = "Hello
World & Space"

MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.

详细信息将添加到 新语言特性 VB-14 Github 存储库。

好吧,既然你似乎对你的巨蟒,我建议你复制你的文本到巨蟒,像:

 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")

或者

  print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))


#    "this is gonna" & _
#    "last quite a" & _
#    "few lines"

然后至少你可以复制出来,并把它放在你的 VB 代码。如果你绑定了一个热键,加分 (最快获得: 自动热键)为粘贴缓冲区中的任何内容执行此操作。同样的思想对于 SQL 格式化程序也适用。

对我来说,这是 VB 作为一种语言最令人讨厌的地方。 说真的,我曾经把字符串写在一个文件里,然后写了一些代码,大概是这样的:

Dim s as String = file_get_contents("filename.txt")

这样我就可以直接在 SQL 服务器上测试查询,如果我需要的话。

我当前的方法是在 SQLServer 上使用一个存储过程并调用它,这样我就可以将参数传递给查询,等等

您可以(应该?)将字符串放入一个资源文件(例如“ My Project”/Resources) ,然后使用

 Dim a = My.Resources.Whatever_you_chose

我用了这个变体:

     Dim query As String = <![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 = 1
AND
c.ActionPlan = 1
AND q.Q_Year = '11/12'
AND q.Q_Term <= (SELECT CurrentTerm FROM CR_Current_Term)
]]>.Value()

它在字符串中允许 < >

免责声明: 我喜欢 python。它的多行字符串只是原因之一。

但是我也使用 VB.Net,所以这里有一个提高长字符串可读性的捷径。

  Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)

这篇文章对我很有帮助,但是没有人提到如何使用 连接来发送一些变量,这是99% 的情况下都需要做的事情。

... <% = 变量 %>..。

你要这么做:

< SQL > 选择 * FROM MyTable WHERE FirstName =’<% = EnteredName% >’ . Value

在 vb.net 中使用 XElement 类实现多行字符串。

Imports System.Xml.Linq


Public Sub Test()


dim sOderBy as string = ""


dim xe as XElement = <SQL>
SELECT * FROM <%= sTableName %>
<ORDER_BY> ORDER BY <%= sOrderBy %></ORDER_BY>
</SQL>


'** conditionally remove a section
if sOrderBy.Length = 0 then xe.<ORDER BY>.Remove


'** convert XElement value to a string
dim sSQL as String = xe.Value


End Sub

在 VisualStudio2010(VBNET)中,我尝试了下面的方法,效果很好

Dim HtmlSample As String = <anything>what ever you want to type here with multiline strings</anything>


dim Test1 as string =<a>onother multiline example</a>

自 VisualStudio2015以来,可以使用多行字符串。

Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"

您可以将它们与 字符串插值结合起来,以最大限度地发挥作用:

Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"


Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"

注意,插值字符串以 $开头,您需要关注内部包含的 "{}-分别将它们转换成 ""\{\{}}

在这里,您可以看到上面代码示例的插值部分的实际 语法突显:

enter image description here

如果你想知道 Visual Studio 编辑器对它们的识别是否也适用于重构(例如大规模重命名变量) ,那么你是对的,代码重构和这些一起工作。没有提到它们也支持智能感知、引用计数或代码分析。

你可以使用 XML

dim vrstr as string = <s>
some words
some words
some
words
</s>

我弄明白了如何同时使用 < ! [ CDATA [和 <% = for 变量,这使您可以毫无顾虑地编写代码。

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

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

在 Visual Basic 14.0-https://roslyn.codeplex.com/discussions/571884中引入了多行字符串文本

您可以在 VS2015预览版中使用,现在就取消 -http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs(注意,即使是针对旧版本的。NET 架构)

Dim multiline = "multi
line
string"

VB 字符串现在基本上和 C # 逐字字符串一样-它们不支持像 n 这样的反斜杠转义序列,而且它们允许字符串中有换行符,你可以用双引号转义引号

由于这是一个可读性问题,我使用了以下代码:

MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text

作为 VisualStudio2015的一部分在 VisualBasic14中可用 Https://msdn.microsoft.com/en-us/magazine/dn890368.aspx

但 R # 尚未支持。好消息是他们很快就会得到支持!请在 你追踪上投票通知 JetBrains 你也需要他们。

如果您需要在 VB.Net 中使用带有行代码变量的 XML 文本,您可以这样做:

<Tag><%= New XCData(T.Property) %></Tag>

使用 vbCrLfvbNewLine。它与 MessageBoxes 和我测试过的许多其他控件一起工作。

Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)

它将显示两个相同的有两行的 MessageBox。

你也可以这样使用 System.Text.StringBuilder类:

Dim sValue As New System.Text.StringBuilder
sValue.AppendLine("1st Line")
sValue.AppendLine("2nd Line")
sValue.AppendLine("3rd Line")

然后使用以下方法得到多行字符串:

sValue.ToString()