¿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
¿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
Respuestas:
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
Los literales de cadena de varias líneas se introdujeron en Visual Basic 14 (en Visual Studio 2015 ). El ejemplo anterior ahora se puede escribir 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 Github de Roslyn New-Language-Features-in-VB-14 .
s="... a=~someint~ ..."
y entonces s=s.Replace("~someint~', SomeInt)
.
VB.Net no tiene esa 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 declaración o expresión de varias líneas. Esto elimina la necesidad de terminar una cadena de varias líneas con _ pero todavía no hay un literal de cadena de varias líneas en VB.
Ejemplo para 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 = <![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
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Puede combinarlos con la 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 comienzan con interpolados $
y hay que cuidar "
, {
y }
contenían el interior - convertirlos 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 parte del editor de Visual Studio también funciona con la refactorización (por ejemplo, renombrar en masa las variables), entonces tiene razón, la refactorización de código funciona con estas. Sin mencionar que también admiten IntelliSense, recuento de referencias o análisis de código.
Los literales de cadena multilínea se introducen en Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Puede usarlo en la Vista previa de VS2015, ahora disponible: http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (tenga en cuenta que todavía puede usar VS2015 incluso cuando se dirige a una persona mayor versión del marco .NET)
Dim multiline = "multi
line
string"
Las cadenas VB ahora son básicamente las mismas que las cadenas textuales C #: no admiten secuencias de escape de barra invertida como \ n, y permiten nuevas líneas dentro de la cadena, y usted escapa del símbolo de comillas con comillas dobles ""
Este fue un artículo realmente útil para mí, pero nadie mencionó cómo concatenar en caso de que desee 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
Bueno, dado que parece estar en su python, le sugiero que copie su texto en python, como:
s="""this is gonna
last quite a
few lines"""
entonces haz un:
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 vincula una tecla de acceso rápido (la más rápida para obtener: Autohotkey ) para hacer esto por lo que sea que esté en su búfer de pegado. La misma idea funciona bien para un formateador SQL.
Literales de cadena de varias líneas 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
Para mí eso es lo más molesto de VB como lenguaje. En serio, una vez escribí la cadena en un archivo y escribí algo en el código:
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 parámetros a la consulta, etc.
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 después para que el CDATA no capture el código VB. Necesita 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
Descargo de responsabilidad: me encanta python. Sus cadenas de varias líneas 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 = <s>
some words
some words
some
words
</s>
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>
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 pronto serán compatibles! Vote en Youtrack para notificar a JetBrains que también los necesita.
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>
Como se trata de un problema de legibilidad, he utilizado el siguiente código:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
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.
No, VB.NET todavía no tiene esa característica. Sin embargo, estará disponible en la próxima iteración de VB (visual basic 10) ( 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 activa la multilínea.