Existe uma maneira de ter seqüências multilinhas no VB.NET como Python
a = """
multi
line
string
"""
ou PHP?
$a = <<<END
multi
line
string
END;
Claro que algo que não é
"multi" & _
"line
Existe uma maneira de ter seqüências multilinhas no VB.NET como Python
a = """
multi
line
string
"""
ou PHP?
$a = <<<END
multi
line
string
END;
Claro que algo que não é
"multi" & _
"line
Respostas:
Você pode usar literais XML para obter um efeito semelhante:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Lembre-se de que se você tiver caracteres especiais, use um bloco CDATA:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Literais de seqüência de caracteres de várias linhas foram introduzidas no Visual Basic 14 (no Visual Studio 2015 ). O exemplo acima agora pode ser escrito 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.
Os detalhes são adicionados ao repositório do Roslyn New-Language-Features-in-VB-14 Github.
s="... a=~someint~ ..."
e então s=s.Replace("~someint~', SomeInt)
.
VB.Net não tem essa característica e vai não estar chegando no Visual Studio 2010. O recurso que jirwin está se referindo é chamado implícita continuação de linha. Tem a ver com a remoção do _ de uma instrução ou expressão de várias linhas. Isso elimina a necessidade de terminar uma cadeia de linhas multilinha com _, mas ainda não existe uma cadeia de linhas multilinha literal no VB.
Exemplo para cadeia de linhas múltiplas
Visual Studio 2008
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
Eu usei 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 <> na string
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Você pode combiná-los com interpolação de string para maximizar a utilidade:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Nota que as cordas interpolados começar $
e você precisa tomar cuidado de "
, {
e }
contido dentro - convertê-los em ""
, {{
ou }}
respectivamente.
Aqui você pode ver o real realce da sintaxe de partes interpoladas do exemplo de código acima:
Se você se perguntar se o reconhecimento deles pelo editor do Visual Studio também funciona com refatoração (por exemplo, renomeação em massa das variáveis), então você está certo, a refatoração de código funciona com elas. Sem mencionar que eles também oferecem suporte ao IntelliSense, contagem de referência ou análise de código.
Literais de cadeia de linhas múltiplas são introduzidos no Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Você pode usá-lo na Pré-visualização do VS2015, já disponível - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (observe que você ainda pode usar o VS2015 mesmo quando estiver direcionando um versão do framework .NET)
Dim multiline = "multi
line
string"
As strings VB agora são basicamente as mesmas que as strings verbais de C # - elas não suportam sequências de escape de barra invertida como \ n e permitem novas linhas dentro da string, e você escapa o símbolo de aspas com aspas duplas ""
este foi um artigo realmente útil para mim, mas ninguém mencionou como concatenar caso você queira enviar algumas variáveis, que é o que você precisa fazer 99% do tempo.
... <% = variável %> ...
Aqui está como você faz isso:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Bem, desde que você parece estar em seu python, posso sugerir que você copie seu texto em python, como:
s="""this is gonna
last quite a
few lines"""
então faça um:
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")
ou
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
pelo menos você pode copiar isso e colocá-lo no seu código VB. Pontos de bônus se você vincular uma tecla de atalho (mais rápida para obter: Autohotkey ) para fazer isso para o que estiver no seu buffer de colagem. A mesma idéia funciona bem para um formatador SQL.
Literais de sequências de várias linhas no vb.net usando a classe 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 mim, essa é a coisa mais irritante sobre o VB como idioma. Sério, uma vez eu escrevi a string em um arquivo e escrevi um código semelhante ao:
Dim s as String = file_get_contents("filename.txt")
só assim eu poderia testar a consulta diretamente no servidor SQL, se necessário.
Meu método atual é usar um procedimento armazenado no SQL Server e apenas chamar isso para que eu possa passar parâmetros para a consulta, etc.
Eu descobri como usar ambos <! [CDATA [junto com <% = para variáveis, o que permite que você codifique sem se preocupar.
Você basicamente precisa finalizar as tags CDATA antes da variável VB e adicioná-la novamente depois para que o CDATA não capture o código VB. Você precisa agrupar todo o bloco de código em uma tag, pois terá vários blocos CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Disclaimer: Eu amo python. Suas seqüências de linhas múltiplas são apenas uma razão.
Mas eu também faço VB.Net, então aqui está o meu atalho para seqüências longas mais legíveis.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
você pode usar XML para isso como
dim vrstr as string = <s>
some words
some words
some
words
</s>
no Visual studio 2010 (VB NET) eu tento o seguinte e funciona bem
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>
Disponível no Visual Basic 14 como parte do Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Mas ainda não é suportado pelo R #. A boa notícia é que eles serão suportados em breve! Por favor, vote no Youtrack para notificar o JetBrains de que você também precisa deles.
Se você precisar de um literal XML no VB.Net com uma variável de código de linha, é assim que você faria:
<Tag><%= New XCData(T.Property) %></Tag>
Como esse é um problema de legibilidade, usei o seguinte código:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Use vbCrLf
ou vbNewLine
. Funciona com MessageBoxes e muitos outros controles que testei.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
Ele mostrará duas MessageBoxes idênticas com 2 linhas.
Não, o VB.NET ainda não possui esse recurso. Ele estará disponível na próxima iteração do VB (visual basic 10), no entanto ( link )
se for como C # (não tenho o VB.Net instalado), você pode prefixar uma string com @
foo = @"Multiline
String"
isso também é útil para coisas como @ "C: \ Windows \ System32 \" - basicamente desativa o escape e ativa a multilinha.