VB.NET中的多行string

有没有办法在VB.NET中有像python一样的多行string

a = """ multi line string """ 

或PHP

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

当然不是的

 "multi" & _ "line 

您可以使用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 

2015年更新:

Visual Basic 14 (在Visual Studio 2015中 )中引入了多行string文字。 上面的例子现在可以写成:

 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.

详细信息被添加到Roslyn New-Language-Features-in-VB-14 Github存储库中。

VB.Net没有这样的function,它将不会在Visual Studio 2010中引入.jirwin引用的function称为隐式行延续。 它与从多行语句或expression式中删除_有关。 这确实消除了用_终止多行string的需要,但在VB中仍然没有多行string文字。

多行string示例

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

它允许<>在string中

多行string文字在Visual Basic 14.0中引入 – https://roslyn.codeplex.com/discussions/57188​​4

您可以在VS2015预览版中使用,现在就可以使用 – http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (注意即使定位到较旧的版本,仍然可以使用VS2015 .NET框架的版本)

 Dim multiline = "multi line string" 

VBstring现在基本上与C#逐字string相同 – 它们不支持像\ n这样的反斜杠转义序列,并且它们允许在string内换行,并且用双引号“”来转义引号。

这对我来说是一个非常有用的文章,但是没有人提到如果要发送一些variables,如何进行连接 ,这就是99%的时间需要做的事情。

<%= variable %>

以下是你如何做到这一点:

<SQL> SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>' </SQL>.Value

那么,因为你似乎在你的Python,我可以build议你复制你的文本到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" 

那么至less你可以复制出来,并把它放在你的VB代码。 如果你绑定一个热键(最快得到: Autohotkey ),你可以为你的粘贴缓冲区中的任何东西做这个。 对于一个SQL格式化程序来说,这个想法也适用。

自Visual Studio 2015以来,可以使用多行string。

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

您可以将它们与string插值结合使用以最大限度地提高有用性:

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

请注意,内插string以$开头,您需要注意内部包含的" {} ,分别将它们转换为""{{}}

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

在这里输入图像说明

如果您认为Visual Studio编辑器的识别function也适用于重构(例如,批量重命名这些variables),那么您是对的, 代码重构可以处理这些重构。 不要提他们也支持智能感知,引用计数或代码分析。

vb.net中使用XElement类的多行string文字。

 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 

对我来说这是关于VB作为一种语言最讨厌的事情。 说真的,我曾经把这个string写在一个文件里,写了一些代码:

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

只是所以我可以直接在SQL服务器上testing查询,如果我需要。

我目前的方法是使用SQL Server上的存储过程,只是调用,所以我可以传递参数的查询等

我想出了如何同时使用<![CDATA [和<%=用于variables,这可以使您无需担心编码。

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

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

你可以(应该?)把string放在一个资源文件(例如“我的项目”/资源),然后把它

  Dim a = My.Resources.Whatever_you_chose 

免责声明:我爱Python。 这是多行string只是一个原因。

但是我也做了VB.Net,所以这里是我的捷径来更可读的长string。

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

你可以像这样使用XML

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

在Visual Studio 2010(VB NET)我尝试以下,并正常工作

 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> 

作为Visual Studio 2015的一部分在Visual Basic 14中可用https://msdn.microsoft.com/zh-cn/magazine/dn890368.aspx

但是还没有被R#支持。 好消息是他们很快就会得到支持! 请投Youtrack通知JetBrains您也需要他们。

如果你需要一个带有行代码variables的VB.Net中的XML文字,你将如何做到这一点:

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

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

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

它将显示两行相同的MessageBoxes。

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

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

不,VB.NET还没有这样的function。 它将在VB(Visual Basic 10)的下一个迭代中可用,但是( 链接 )

如果它像C#(我没有安装VB.Net),你可以用@

 foo = @"Multiline String" 

这对于@“C:\ Windows \ System32 \”这样的东西也很有用 – 它基本上closures了转义并打开了多行。