Cadenas de multilínea en VB.NET

¿Hay alguna manera de tener cadenas multilínea en VB.NET como Python?

a = """ multi line string """ 

o PHP?

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

Por supuesto, algo que no es

 "multi" & _ "line 

Puede usar XML Literals para lograr un efecto similar:

 Imports System.XML Imports System.XML.Linq Imports System.Core Dim s As String = Hello World.Value 

Recuerde que si tiene caracteres especiales, debe usar un bloque CDATA:

 Dim s As String = .Value 

ACTUALIZACIÓN 2015:

Los literales de cadenas multilínea se introdujeron en Visual Basic 14 (en Visual Studio 2015 ). El ejemplo anterior se puede escribir ahora como:

 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.

Los detalles se agregan al repository de Roslyn New-Language-Features-in-VB-14 Github.

VB.Net no tiene dicha característica y no aparecerá en Visual Studio 2010. La característica a la que se refiere jirwin se llama continuación de línea implícita. Tiene que ver con eliminar el _ de una instrucción o expresión de varias líneas. Esto elimina la necesidad de terminar una cadena multilínea con _, pero todavía no hay literal de cadena multilínea en VB.

Ejemplo de cadena multilínea

Visual Studio 2008

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

Visual Studio 2010

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

Usé esta variante:

  Dim query As String = .Value() 

permite <> en la cadena

Los literales de cadena multilínea se introducen en Visual Basic 14.0 – https://roslyn.codeplex.com/discussions/571884

Puede utilizarlo en la vista previa de VS2015, ahora – http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (tenga en cuenta que aún puede usar VS2015 incluso cuando se dirige a un versión del framework .NET)

 Dim multiline = "multi line string" 

Las cadenas VB son básicamente las mismas que las cadenas verbales de C #: no admiten secuencias de escape de barra invertida como \ n, y permiten nuevas líneas dentro de la cadena, y se escapa del símbolo de comillas con comillas dobles “”

Las cadenas de múltiples líneas están disponibles desde Visual Studio 2015.

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

Puede combinarlos con interpolación de cadenas para maximizar la utilidad:

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

Tenga en cuenta que las cadenas interpoladas comienzan con $ y debe ocuparse de " , { y } contenido en el interior, conviértalos en "" , {{ o }} respectivamente.

Aquí puede ver el resaltado de syntax real de las partes interpoladas del ejemplo de código anterior:

enter image description here

Si se pregunta si su reconocimiento por el editor de Visual Studio también funciona con refactorización (por ejemplo, cambiar el nombre de las variables en masa), entonces tiene razón, la refactorización de código funciona con estos. Sin mencionar que también son compatibles con IntelliSense, recuento de referencias o análisis de código.

este fue un artículo muy útil para mí, pero nadie mencionó cómo concatenar en caso de que quiera enviar algunas variables, que es lo que debe hacer el 99% del tiempo.

<% = variable %>

Así es como lo haces:

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

Bueno, ya que pareces estar en tu python, te sugiero que copies tu texto en python, como:

  s="""this is gonna last quite a few lines""" 

luego haz a:

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

o

  print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n'))) # "this is gonna" & _ # "last quite a" & _ # "few lines" 

entonces al menos puedes copiar eso y ponerlo en tu código VB. Puntos de bonificación si enlaza una tecla de acceso rápido (la más rápida para obtener: Autohotkey ) para hacer esto para lo que sea que esté en su buffer de pegado. La misma idea funciona bien para un formateador SQL.

Literales de cadenas multilínea en vb.net utilizando la clase XElement.

 Imports System.Xml.Linq Public Sub Test() dim sOderBy as string = "" dim xe as XElement =  SELECT * FROM <%= sTableName %>  ORDER BY <%= sOrderBy %>  '** conditionally remove a section if sOrderBy.Length = 0 then xe..Remove '** convert XElement value to a string dim sSQL as String = xe.Value End Sub 

Para mí, eso es lo más molesto de VB como lenguaje. En serio, una vez escribí la cadena en un archivo y escribí el código algo así como:

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

solo para poder probar la consulta directamente en el servidor SQL si es necesario.

Mi método actual es usar un procedimiento almacenado en SQL Server y simplemente llamarlo para poder pasar los parámetros a la consulta, etc.

Descubrí cómo usar ambos

Básicamente, debe terminar las tags CDATA antes de la variable VB y luego volver a agregarlas para que el CDATA no capture el código VB. Debe envolver todo el bloque de código en una etiqueta porque tendrá múltiples bloques CDATA.

 Dim script As String =  var URL = ']]><%= domain %>]]> .value 

Podría (¿debería?) Poner la cadena en un archivo de recursos (por ejemplo, “Mi proyecto” / Recursos) y luego obtenerlo con

  Dim a = My.Resources.Whatever_you_chose 

Descargo de responsabilidad: me encanta Python. Sus cadenas multilínea son solo una razón.

Pero también hago VB.Net, así que aquí está mi atajo para cadenas largas más legibles.

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

puedes usar XML para esto como

 dim vrstr as string =  some words some words some words  

en Visual Studio 2010 (VB NET) pruebo lo siguiente y funciona bien

 Dim HtmlSample As String = what ever you want to type here with multiline strings dim Test1 as string =onother multiline example 

Disponible en Visual Basic 14 como parte de Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx

Pero aún no es compatible con R #. ¡La buena noticia es que recibirán apoyo pronto! Vota en Youtrack para notificar a JetBrains que también los necesitas.

Si necesita un literal XML en VB.Net con una variable de código de línea, así es como lo haría:

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

Use vbCrLf o vbNewLine . Funciona con MessageBoxes y muchos otros controles que probé.

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

Mostrará dos MessageBoxes idénticos con 2 líneas.

También puede usar la clase System.Text.StringBuilder de esta manera:

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

Luego obtienes la cadena multilínea usando:

 sValue.ToString() 

Como este es un problema de legibilidad, he usado el siguiente código:

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

No, VB.NET aún no tiene esa característica. Estará disponible en la próxima iteración de VB (visual basic 10) sin embargo ( enlace )

si es como C # (no tengo instalado VB.Net) puede prefijar una cadena con @

 foo = @"Multiline String" 

esto también es útil para cosas como @ “C: \ Windows \ System32 \” – esencialmente desactiva el escape y enciende la línea múltiple.