VB.NET中的多行字符串

时间:2009-04-01 16:36:49

标签: vb.net

有没有办法在VB.NET中使用多行字符串,如Python

a = """
multi
line
string
"""

还是PHP?

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

当然不是

的东西
"multi" & _
"line

21 个答案:

答案 0 :(得分:212)

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

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.

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

答案 1 :(得分:47)

VB.Net没有这样的功能,它将进入Visual Studio 2010.jirwin引用的功能称为隐式行延续。它与从多行语句或表达式中删除_有关。这确实消除了使用_终止多行字符串的需要,但VB中仍然没有多行字符串文字。

多行字符串

的示例

Visual Studio 2008

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

Visual Studio 2010

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

答案 2 :(得分:37)

我使用了这个变种:

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

它允许&lt; &GT;在字符串中

答案 3 :(得分:25)

自Visual Studio 2015以来,可以使用多行字符串。

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
"

请注意,插值字符串以$开头,您需要处理内部包含的"{} - 将它们转换为"", <{1}}或{{

您可以在此处看到上述代码示例的插值部分的实际语法突出显示

enter image description here

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

答案 4 :(得分:20)

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

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

Dim multiline = "multi
line
string"

VB字符串现在基本上与C#逐字字符串相同 - 它们不支持像\ n那样的反斜杠转义序列,并且它们允许字符串中的换行符,并且您使用双引号转义引号符号“”

答案 5 :(得分:14)

这对我来说是一篇非常有用的文章,但没有人提到如何连接,以防你想要发送一些变量,这是99%的时间你需要做的事情。

... &lt;%= 变量%&gt; ...

这是你如何做到的:

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

答案 6 :(得分:10)

好吧,既然你似乎在使用你的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格式化程序。

答案 7 :(得分:8)

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

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

答案 8 :(得分:7)

对我而言,这是VB作为一种语言最烦人的事情。 说真的,我曾经在一个文件中写了一个字符串,并编写了类似的代码:

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

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

我目前的方法是在SQL Server上使用存储过程,然后调用它,这样我就可以将参数传递给查询等等。

答案 9 :(得分:5)

我想出了如何同时使用&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

答案 10 :(得分:3)

你可以(应该?)将字符串放在资源文件中(例如“我的项目”/资源)然后用

获取它
 Dim a = My.Resources.Whatever_you_chose

答案 11 :(得分:3)

免责声明:我喜欢python。它的多线串只是一个原因。

但我也做了VB.Net,所以这里是我的捷径,以获得更具可读性的长字符串。

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

答案 12 :(得分:2)

你可以像这样使用XML

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

答案 13 :(得分:1)

作为Visual Studio 2015的一部分在Visual Basic 14中提供 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx

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

答案 14 :(得分:1)

在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>

答案 15 :(得分:0)

如果你需要VB.Net中的XML文字和行代码变量,你可以这样做:

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

答案 16 :(得分:0)

您也可以这样使用System.Text.StringBuilder课程:

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

然后使用以下方法获取多行字符串:

sValue.ToString()

答案 17 :(得分:-1)

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

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

答案 18 :(得分:-1)

使用vbCrLfvbNewLine。它适用于MessageBoxes和我测试的许多其他控件。

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

它将显示两个相同的MessageBoxes,包含2行。

答案 19 :(得分:-9)

不,VB.NET还没有这样的功能。它将在VB的下一次迭代(visual basic 10)中可用,但是(link

答案 20 :(得分:-16)

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

foo = @"Multiline
String"

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