vb.net

Cadenas de multilínea en VB.NET



(21)

¿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


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 sintaxis real de las partes interpoladas del ejemplo de código anterior:

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.


Bueno, ya que pareces estar en tu pitón, 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 Autohotkey 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.


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


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)


Descubrí cómo usar ambos <! [CDATA [junto con <% = para las variables, lo que te permite codificar sin preocupaciones.

Básicamente, debe terminar las etiquetas 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 = <code><![CDATA[ <script type="text/javascript"> var URL = '']]><%= domain %><![CDATA[/mypage.html''; </script>]]> </code>.value



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


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


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


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.


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


Puede usar XML Literals para lograr un efecto similar:

Imports System.XML Imports System.XML.Linq Imports System.Core Dim s As String = <a>Hello World</a>.Value

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

Dim s As String = <![CDATA[Hello World & Space]]>.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 repositorio de Roslyn New-Language-Features-in-VB-14 Github.


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

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


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


Usé esta variante:

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

permite <> en la cadena


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.


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"


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

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>


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:

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


puedes usar XML para esto como

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


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.