Mis dos centavos: en VS 2017 se compilaría su código VB.NET.
ᗩИ Ꭰ ЯƎᗩ
Respuestas:
223
Puede usar XML Literals para lograr un efecto similar:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s AsString=<a>Hello
World</a>.Value
Recuerde que si tiene caracteres especiales, debe usar un bloque CDATA:
Dim s AsString=<![CDATA[Hello
World & Space]]>.Value
ACTUALIZACIÓN 2015:
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 AsString="Hello
World & Space"
MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.
¿Cómo puedes hacer reemplazos variables allí? como "a =" & someint & ","
Christopher Mahan
1
@Christopher: por lo general, me resulta más legible colocar tokens en la cadena constante y luego reemplazarlos. Entonces s="... a=~someint~ ..."y entonces s=s.Replace("~someint~', SomeInt).
Herb Caudill
Esto no parece funcionar con la compilación dinámica: CodeDomProvider.CreateProvider ("VisualBasic"). CompileAssemblyFromFile (<opciones>, <archivo .vb con la sintaxis del truco anterior>) ... ¿Alguna idea? ¿Es esto solo el azúcar sintáctico VS 2010?
Chad
1
@romkyns No es cierto, descubrí cómo usar CDATA y aún ser capaz de incrustar usando <% =%> Ver aquí
Nelson
1
¡Increíble! ¿Cómo se mantiene la sangría del código sin introducirlo en el literal bajo la sintaxis más reciente?
Panzercrisis
50
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.
Entonces, ¿cómo funciona para los literales XML? O es posible, o los literales XML están usando una técnica diferente, y si es una técnica diferente, entonces una que podría extenderse a cadenas de varias líneas.
mellamokb
1
Los literales XML @mellamokb son ... especiales por falta de una palabra mejor. El compilador los comprende y, por lo tanto, les permitirá abarcar varias líneas implícitamente. No se agregó dicho soporte para cadenas de varias líneas. Agregar dicho soporte es mucho más fácil que los literales XML, simplemente no cumplió con los requisitos para esa versión.
JaredPar
38
Usé esta variante:
Dim query AsString=<![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 =1AND
c.ActionPlan =1AND q.Q_Year ='11/12'AND q.Q_Term <=(SELECT CurrentTerm FROM CR_Current_Term)]]>.Value()
Las cadenas de varias líneas están disponibles desde Visual Studio 2015.
Dim sql AsString="
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Puede combinarlos con la interpolación de cadenas para maximizar la utilidad:
Dim primaryKey AsString="ID"Dim inventoryTable AsString="inventory"Dim sql AsString=$"
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.
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 ""
Gracias Lucian por agregar cadenas de varias líneas en el VB. Tal vez pueda actualizar su respuesta, porque VS 2015 ahora es RTM. Y tal vez también pueda meter a alguien en su empresa para actualizar el artículo relacionado de MSDN .
miroxlav
14
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
En este caso, desea evitar la concatenación y, en su lugar, utilizar parámetros SQL, ya que son mejores para reforzar los ataques de inyección SQL. Sin embargo, puedo ver que esto es útil para la generación dinámica de SQL (sin pasar por la entrada del usuario).
Chad Levy
10
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")
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
PublicSub Test()dim sOderBy asstring=""dim xe as XElement =<SQL>SELECT* FROM <%= sTableName %><ORDER_BY> ORDER BY <%= sOrderBy %></ORDER_BY></SQL>'** conditionally remove a section if sOrderBy.Length =0then xe.<ORDER BY>.Remove
'** convert XElement value to a string dim sSQL asString= xe.Value
EndSub
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 AsString=<code><![CDATA[<script type="text/javascript">
var URL =']]><%= domain %><![CDATA[/mypage.html';</script>]]></code>.value
Necesitas _ al final de la línea para cada "Línea .." que se ve fea.
Kenji Noguchi
2
En realidad no lo haces. Las versiones posteriores de VB (2010 y posterior, creo?) No requieren un _ en muchos casos, incluido el ejemplo que se muestra aquí.
Darryl
2
puedes usar XML para esto como
dim vrstr asstring=<s>
some words
some words
some
words
</s>
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.
Esto es malo. Acaba de crear 4 instancias de cadena
TS
¡Heredé un código VB6 heredado que tengo que portar a VB.NET que está lleno de estos! :( En este caso, prefiero sacrificar el rendimiento para mantener la legibilidad.
Zac
No tienes que hacerlo Siempre se puede concatenar sin reasignar una variable y formatear dentro de esas líneas
TS
En mi caso, no es aplicable cambiar a la sintaxis correcta, ya que debería modificar un montón de código completo y no queda tiempo para el proyecto.
Zac
-1
Use vbCrLfo vbNewLine. Funciona con MessageBoxes y muchos otros controles que probé.
Respuestas:
Puede usar XML Literals para lograr un efecto similar:
Recuerde que si tiene caracteres especiales, debe usar un bloque CDATA:
ACTUALIZACIÓN 2015:
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:
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 .
fuente
s="... a=~someint~ ..."
y entoncess=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
Visual Studio 2010
fuente
Usé esta variante:
permite <> en la cadena
fuente
Las cadenas de varias líneas están disponibles desde Visual Studio 2015.
Puede combinarlos con la interpolación de cadenas para maximizar la utilidad:
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.
fuente
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)
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 ""
fuente
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
fuente
Bueno, dado que parece estar en su python, le sugiero que copie su texto en python, como:
entonces haz un:
o
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.
fuente
Literales de cadena de varias líneas en vb.net utilizando la clase XElement.
fuente
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:
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.
fuente
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.
fuente
Podría (debería?) Poner la cadena en un archivo de recursos (por ejemplo, "Mi proyecto" / Recursos) y luego obtenerlo con
fuente
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.
fuente
puedes usar XML para esto como
fuente
en Visual Studio 2010 (VB NET) intento lo siguiente y funciona bien
fuente
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.
fuente
Si necesita un literal XML en VB.Net con una variable de código de línea, así es como lo haría:
fuente
También puede usar la
System.Text.StringBuilder
clase de esta manera:Luego obtienes la cadena multilínea usando:
fuente
Como se trata de un problema de legibilidad, he utilizado el siguiente código:
fuente
Use
vbCrLf
ovbNewLine
. Funciona con MessageBoxes y muchos otros controles que probé.Mostrará dos MessageBoxes idénticos con 2 líneas.
fuente
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 )
fuente
si es como C # (no tengo instalado VB.Net), puede prefijar una cadena con @
Esto también es útil para cosas como @ "C: \ Windows \ System32 \": esencialmente desactiva el escape y activa la multilínea.
fuente