Подтвердить что ты не робот

Как выполнить стенографический литерал в VB.NET?

Как вы выполняете строковый литерал в VB.NET?

Это достигается в С# следующим образом:

String str = @"c:\folder1\file1.txt";

Это означает, что обратные косые черты обрабатываются буквально, а не как escape-символы.

Как это достигается в VB.NET?

4b9b3361

Ответ 1

Все строковые литералы в VB.NET являются строковыми литералами. Просто напишите

Dim str As String = "c:\folder1\file1.txt"

VB.NET не поддерживает встроенные контрольные символы. Таким образом, обратная косая черта всегда интерпретируется буквально.

Единственный символ, который должен быть экранирован, - это знак двойной кавычки, который ускоряется путем его удвоения, как и в С#

Dim s As String = """Ahoy!"" cried the captain." ' "Ahoy!" cried the captain.

Ответ 2

@MarkJ уже указал это в сообщении @Jon Skeet.

VB.Net поддерживает эту функцию abomination, если вам абсолютно необходимо использовать дословный текст с помощью встроенного XML-литерала.

Рассмотрим кэширование строки! Не оценивайте это каждый раз...

Imports System.Xml.Linq

Dim cmdText as String = <![CDATA[
SELECT 
Field1, Field2, Field3 
FROM table
WHERE Field1 = 1
]]>.Value

[edit 2015-Jan-5]

VB14/VS2015 поддерживает многострочные строки без каких-либо махинаций.

Dim cmdText as String = "
SELECT 
Field1, Field2, Field3 
FROM table
WHERE Field1 = 1"

Ответ 3

VB в любом случае не рассматривает \ как escape-символ, поэтому вы можете просто написать строку как обычный литерал:

Dim str = "c:\folder1\file1.txt"

Насколько мне известно, VB не имеет никакого способа достичь другой важной цели стенографических литературных строк, например, о разрешении нескольких строк - для этого вам нужно использовать VbCrLf. (Или Environment.NewLine конечно, это зависит от ваших требований. Иногда вам нужен системный разделитель строк, иногда требуется конкретный, как того требует конкретный протокол и т.д.),

EDIT: Новые версии VB поддерживают несколько строк в строковых литералах

Ответ 4

Если вы сомневаетесь, посмотрите на эту страницу сравнения: http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

VB.NET

 'No string literal operator     
 Dim filename As String = "c:\temp\x.dat"

С#

// String literal 
string filename = @"c:\temp\x.dat";  
string filename = "c:\\temp\\x.dat";  

Ответ 5

VB.NET не распознает символ "\" как escape-символ. Но, возможно, вы можете использовать другое решение (учтите, что он работает медленно, чем конкатенация, например):

Dim s As String = Regex.Unescape("c:\\folder1\\file1.txt\nc:\\folder1\\file2.txt\nc:\\folder1\\file3.txt")

В этом случае строка "s" содержит три строки. Символ "\" защищает следующий "\" от regex метода Unescape(), поэтому он повторяется дважды каждый раз.

"\n" - специальный символ новой строки типа С#. Вы также можете использовать "\ t" (вкладка) и т.д.

Ответ 6

XML-литералы VB, к сожалению, не будут работать на странице .vbhtml бритвы. Надеюсь, это изменится в следующем выпуске.

Ответ 7

Dim sourceText As String =  
    <string>  


    Imports Microsoft.VisualBasic  
    Imports System  
    Imports System.Collections  
    Imports Microsoft.Win32  
    Imports System.Linq  
    Imports System.Text  
    Imports Roslyn.Compilers  
    Imports System.ComponentModel  
    Imports System.Runtime.CompilerServices  
    Imports Roslyn.Compilers.VisualBasic  

    Namespace HelloWorld  
      Module Program  
        Sub Main(args As String())  
          Console.WriteLine("Hello, World!")  
        End Sub  
      End Module  
    End Namespace  
</string>