Apakah ada cara untuk memiliki string multiline di VB.NET seperti Python
a = """
multi
line
string
"""
atau PHP?
$a = <<<END
multi
line
string
END;
Tentu saja sesuatu yang bukan
"multi" & _
"line
Apakah ada cara untuk memiliki string multiline di VB.NET seperti Python
a = """
multi
line
string
"""
atau PHP?
$a = <<<END
multi
line
string
END;
Tentu saja sesuatu yang bukan
"multi" & _
"line
Jawaban:
Anda dapat menggunakan XML Literals untuk mencapai efek yang serupa:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Ingat bahwa jika Anda memiliki karakter khusus, Anda harus menggunakan blok CDATA:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Multi-line string literal diperkenalkan dalam Visual Basic 14 (dalam Visual Studio 2015 ). Contoh di atas sekarang dapat ditulis sebagai:
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.
Rincian ditambahkan ke Roslyn Baru-Bahasa-Fitur-in-VB-14 Github repositori.
s="... a=~someint~ ..."
lalu s=s.Replace("~someint~', SomeInt)
.
VB.Net tidak memiliki fitur seperti itu dan tidak akan hadir di Visual Studio 2010. Fitur yang dirujuk oleh jirwin disebut kelanjutan garis implisit. Itu ada hubungannya dengan menghapus _ dari pernyataan atau ekspresi multi-line. Ini menghapus kebutuhan untuk mengakhiri string multiline dengan _ tetapi masih belum ada string mult-line literal di VB.
Contoh untuk string multiline
Visual Studio 2008
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
Saya menggunakan varian ini:
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()
itu memungkinkan <> dalam string
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Anda dapat menggabungkannya dengan interpolasi string untuk memaksimalkan kegunaan:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Perhatikan bahwa string interpolasi dimulai dengan $
dan Anda perlu mengurus "
, {
dan }
terkandung di dalamnya - mengubahnya menjadi ""
, {{
atau }}
masing - masing.
Di sini Anda dapat melihat penyorotan sintaksis sebenarnya dari bagian-bagian yang diinterpolasi dari contoh kode di atas:
Jika Anda bertanya-tanya apakah pengakuan mereka oleh editor Visual Studio juga bekerja dengan refactoring (mis. Mengubah nama variabel secara massal), maka Anda benar, kode refactoring berfungsi dengan ini. Tidak menyebutkan bahwa mereka juga mendukung IntelliSense, penghitungan referensi atau analisis kode.
Literal string multiline diperkenalkan dalam Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Anda dapat menggunakannya saat itu di VS2015 Preview, keluar sekarang - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (perhatikan bahwa Anda masih dapat menggunakan VS2015 bahkan ketika menargetkan yang lebih tua versi kerangka .NET)
Dim multiline = "multi
line
string"
String VB pada dasarnya sekarang sama dengan string C # verbatim - mereka tidak mendukung urutan pelarian backslash seperti \ n, dan mereka mengizinkan baris baru dalam string, dan Anda keluar dari simbol kutipan dengan tanda kutip ganda ""
ini adalah artikel yang sangat membantu bagi saya, tetapi tidak ada yang menyebutkan cara menggabungkan jika Anda ingin mengirim beberapa variabel, yang perlu Anda lakukan 99% dari waktu.
... <% = variabel %> ...
Begini cara melakukannya:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Nah, karena Anda tampaknya menggunakan python, bolehkah saya menyarankan Anda menyalin teks Anda ke python, seperti:
s="""this is gonna
last quite a
few lines"""
lalu lakukan:
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")
atau
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
maka setidaknya Anda bisa menyalinnya dan memasukkannya ke dalam kode VB Anda. Poin bonus jika Anda mengikat hotkey (tercepat untuk mendapatkan dengan: Autohotkey ) untuk melakukan ini untuk apa pun yang ada di buffer pasta Anda. Ide yang sama bekerja dengan baik untuk formatter SQL.
Literal string multi-line di vb.net menggunakan kelas 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
Bagi saya itu adalah hal yang paling menyebalkan tentang VB sebagai bahasa. Serius, saya pernah menulis string dalam file dan menulis kode sesuatu di sepanjang baris:
Dim s as String = file_get_contents("filename.txt")
hanya supaya saya bisa menguji permintaan langsung pada SQL server jika saya perlu.
Metode saya saat ini adalah dengan menggunakan prosedur tersimpan pada SQL Server dan panggil saja agar saya dapat mengirimkan parameter ke kueri, dll
Saya menemukan cara menggunakan keduanya <! [CDATA [bersama dengan <% = untuk variabel, yang memungkinkan Anda untuk kode tanpa khawatir.
Anda pada dasarnya harus menghentikan tag CDATA sebelum variabel VB dan kemudian menambahkannya kembali sehingga CDATA tidak menangkap kode VB. Anda perlu membungkus seluruh blok kode dalam sebuah tag karena Anda akan memiliki beberapa blok CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Penafian: Saya suka python. Ini string multi-line hanya satu alasan.
Tapi saya juga melakukan VB.Net, jadi inilah jalan pintas saya untuk string panjang yang lebih mudah dibaca.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
Anda dapat menggunakan XML untuk seperti ini
dim vrstr as string = <s>
some words
some words
some
words
</s>
di Visual studio 2010 (VB NET) saya mencoba yang berikut dan berfungsi dengan baik
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>
Tersedia dalam Visual Basic 14 sebagai bagian dari Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Namun belum didukung oleh R #. Berita baiknya adalah mereka akan segera didukung! Silakan pilih Youtrack untuk memberi tahu JetBrains bahwa Anda juga membutuhkannya.
Jika Anda memerlukan XML literal di VB.Net dengan variabel kode baris, ini adalah bagaimana Anda akan melakukannya:
<Tag><%= New XCData(T.Property) %></Tag>
Anda juga dapat menggunakan System.Text.StringBuilder
kelas dengan cara ini:
Dim sValue As New System.Text.StringBuilder
sValue.AppendLine("1st Line")
sValue.AppendLine("2nd Line")
sValue.AppendLine("3rd Line")
Kemudian Anda mendapatkan string multiline menggunakan:
sValue.ToString()
Karena ini adalah masalah keterbacaan, saya telah menggunakan kode berikut:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Gunakan vbCrLf
atau vbNewLine
. Ini bekerja dengan MessageBoxes dan banyak kontrol lain yang saya uji.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
Ini akan menampilkan dua MessageBox identik dengan 2 baris.
Tidak, VB.NET belum memiliki fitur seperti itu. Akan tersedia dalam iterasi VB berikutnya (visual basic 10) ( tautan )
jika itu seperti C # (saya tidak memiliki VB.Net diinstal) Anda dapat awalan string dengan @
foo = @"Multiline
String"
ini juga berguna untuk hal-hal seperti @ "C: \ Windows \ System32 \" - ini pada dasarnya mematikan melarikan diri dan menghidupkan multiline.