有没有办法像Python一样在VB.NET中具有多行字符串
a = """
multi
line
string
"""
还是PHP?
$a = <<<END
multi
line
string
END;
当然不是
"multi" & _
"line
有没有办法像Python一样在VB.NET中具有多行字符串
a = """
multi
line
string
"""
还是PHP?
$a = <<<END
multi
line
string
END;
当然不是
"multi" & _
"line
Answers:
您可以使用XML文字实现类似的效果:
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
在Visual Basic 14中(在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存储库中的Roslyn New-Language-Features-in。
s="... a=~someint~ ..."
反复s=s.Replace("~someint~', SomeInt)
。
VB.Net没有此类功能,Visual Studio 2010 中将不会提供。Jirwin引用的功能称为隐式行连续。它与从多行语句或表达式中删除_有关。这确实消除了用_终止多行字符串的需要,但是VB中仍然没有多行字符串文字。
多行字符串示例
Visual Studio 2008年
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
我使用了这种变体:
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()
它允许在字符串中使用<>
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
"
需要注意的是插值字符串开始$
,你需要照顾"
,{
并}
包含内-它们转化成""
,{{
或}}
分别。
在这里,您可以看到上述代码示例的内插部分的实际语法高亮显示:
如果您想知道Visual Studio编辑器对它们的识别是否也适用于重构(例如,对变量进行大量重命名),那么您是对的,代码重构可以使用这些重构。更不用说它们还支持IntelliSense,引用计数或代码分析。
在Visual Basic 14.0中引入了多行字符串文字-https: //roslyn.codeplex.com/discussions/571884
您可以立即在VS2015预览版中使用,然后使用-http: //www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs(请注意,即使以较早版本为目标,您仍然可以使用VS2015 .NET框架的版本)
Dim multiline = "multi
line
string"
现在,VB字符串基本上与C#逐字字符串相同-它们不支持\ n之类的反斜杠转义序列,并且它们确实允许在字符串中使用换行符,并且您可以使用双引号“”对引号进行转义
好吧,由于您似乎正在使用python,因此我建议您将文本复制到python中,例如:
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代码中。如果您绑定一个热键(最快可通过Autohotkey获得)来为粘贴缓冲区中的内容进行此操作,则可获得加分。对于SQL格式化程序,相同的想法也适用。
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
免责声明:我喜欢python。它是多行字符串只是原因之一。
但是我也做VB.Net,所以这是我的捷径,可读取长字符串。
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
作为Visual Studio 2015的一部分在Visual Basic 14中提供 https://msdn.microsoft.com/zh-cn/magazine/dn890368.aspx
如果您需要VB.Net中带有行代码变量的XML文字,则可以采用以下方法:
<Tag><%= New XCData(T.Property) %></Tag>
由于这是一个可读性问题,因此我使用了以下代码:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
不,VB.NET尚不具有此功能。但是,它将在VB的下一个迭代版本(Visual Basic 10)中可用(链接)
如果就像C#(我没有安装VB.Net),则可以在字符串前面加上@
foo = @"Multiline
String"
这对于诸如@“ C:\ Windows \ System32 \”之类的东西也很有用-它实际上关闭了转义并打开了多行。