Meus dois centavos: no VS 2017, seu código VB.NET seria compilado.
precisa saber é o seguinte
Respostas:
222
Você pode usar literais XML para obter um efeito semelhante:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s AsString=<a>Hello
World</a>.Value
Lembre-se de que se você tiver caracteres especiais, use um bloco CDATA:
Dim s AsString=<![CDATA[Hello
World & Space]]>.Value
ATUALIZAÇÃO DE 2015:
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 AsString="Hello
World & Space"
MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.
como você pode fazer substituições variáveis lá? como "a =" & someint & ","
Christopher Mahan
1
@Christopher - normalmente acho mais legível colocar tokens na string constante e depois substituí-los. Então s="... a=~someint~ ..."e então s=s.Replace("~someint~', SomeInt).
Herb Caudill
Isso não parece funcionar com a compilação dinâmica: CodeDomProvider.CreateProvider ("VisualBasic"). CompileAssemblyFromFile (<opções>, arquivo <.vb com sintaxe de truque acima>) ... Alguma idéia? Isso é apenas açúcar sintático do VS 2010?
Chad
1
@romkyns Não é verdade, eu descobri como usar CDATA e ainda ser capaz de incorporar usando <% =%> Veja aqui
Nelson
1
Impressionante! Como você mantém o recuo do código sem introduzi-lo no literal sob a sintaxe mais recente?
Panzercrisis
50
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.
Então, como funciona para literais XML? Ou é possível, ou literais XML estão usando uma técnica diferente - e, se for uma técnica diferente, uma que possa ser estendida para cadeias de linhas múltiplas.
precisa saber é o seguinte
1
Literais XML @mellamokb são .. especiais por falta de uma palavra melhor. O compilador os entende e, portanto, permitirá que eles abranjam várias linhas implicitamente. Nenhum suporte foi adicionado para cadeias de linhas múltiplas. Adicionar esse suporte é muito mais fácil do que os literais XML, mas simplesmente não atendeu às expectativas desse lançamento.
JaredPar
38
Eu usei 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()
Sequências de várias linhas estão disponíveis desde o Visual Studio 2015.
Dim sql AsString="
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Você pode combiná-los com interpolação de string para maximizar a utilidade:
Dim primaryKey AsString="ID"Dim inventoryTable AsString="inventory"Dim sql AsString=$"
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.
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 ""
Obrigado Lucian por adicionar seqüências de várias linhas ao VB. Talvez você possa atualizar sua resposta, porque o VS 2015 agora é RTM. E talvez você também possa cutucar alguém da sua empresa para atualizar o artigo relacionado do MSDN .
Miroxlav
14
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
Nesse caso, você deseja evitar a concatenação e, em vez disso, usar parâmetros SQL, pois eles são melhores para proteger contra ataques de injeção SQL. Eu posso ver isso sendo útil para a geração dinâmica de SQL (sem passar a entrada do usuário).
Chad Levy
10
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")
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
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
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 AsString=<code><![CDATA[<script type="text/javascript">
var URL =']]><%= domain %><![CDATA[/mypage.html';</script>]]></code>.value
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.
Isto é mau. Você acabou de criar 4 instâncias de string
TS
Eu herdei um código VB6 legado que tenho que portar para o VB.NET que está cheio deles! :( Neste caso eu prefiro sacrificar o desempenho para manter a legibilidade.
Zac
Você não precisa. Você sempre pode concatenar sem reatribuir uma variável e formatar dentro dessas linhas
TS
No meu caso, não é aplicável alternar para a sintaxe correta, pois devo modificar um monte de código e não resta tempo no projeto.
Zac
-1
Use vbCrLfou vbNewLine. Funciona com MessageBoxes e muitos outros controles que testei.
Tem certeza que? Eu sei que eles permitirão declarações de múltiplas linhas, mas eles também permitirão seqüências de múltiplas linhas ? Quero dizer "olá, <newline> mundo"?
Mehrdad Afshari 01/04/09
1
A remoção do caractere de continuação de linha e de cadeias literais de várias linhas são recursos diferentes.
JaredPar
-16
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.
Respostas:
Você pode usar literais XML para obter um efeito semelhante:
Lembre-se de que se você tiver caracteres especiais, use um bloco CDATA:
ATUALIZAÇÃO DE 2015:
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:
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.
fonte
s="... a=~someint~ ..."
e entãos=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
Visual Studio 2010
fonte
Eu usei esta variante:
permite <> na string
fonte
Sequências de várias linhas estão disponíveis desde o Visual Studio 2015.
Você pode combiná-los com interpolação de string para maximizar a utilidade:
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.
fonte
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)
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 ""
fonte
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
fonte
Bem, desde que você parece estar em seu python, posso sugerir que você copie seu texto em python, como:
então faça um:
ou
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.
fonte
Literais de sequências de várias linhas no vb.net usando a classe XElement.
fonte
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:
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.
fonte
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.
fonte
Você poderia (deveria?) Colocar a string em um arquivo de recurso (por exemplo, "Meu Projeto" / Recursos) e depois obtê-la com
fonte
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.
fonte
você pode usar XML para isso como
fonte
no Visual studio 2010 (VB NET) eu tento o seguinte e funciona bem
fonte
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.
fonte
Se você precisar de um literal XML no VB.Net com uma variável de código de linha, é assim que você faria:
fonte
Você também pode usar a
System.Text.StringBuilder
classe desta maneira:Então você obtém a sequência multilinha usando:
fonte
Como esse é um problema de legibilidade, usei o seguinte código:
fonte
Use
vbCrLf
ouvbNewLine
. Funciona com MessageBoxes e muitos outros controles que testei.Ele mostrará duas MessageBoxes idênticas com 2 linhas.
fonte
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 )
fonte
se for como C # (não tenho o VB.Net instalado), você pode prefixar uma string com @
isso também é útil para coisas como @ "C: \ Windows \ System32 \" - basicamente desativa o escape e ativa a multilinha.
fonte