bagaimana Anda bisa melakukan penggantian variabel di sana? seperti "a =" & someint & ","
Christopher Mahan
1
@ Christopher - Saya biasanya merasa lebih mudah dibaca untuk menempatkan token di string konstan, dan kemudian menggantinya. Jadi s="... a=~someint~ ..."lalu s=s.Replace("~someint~', SomeInt).
Herb Caudill
Tampaknya ini tidak berfungsi dengan kompilasi dinamis: CodeDomProvider.CreateProvider ("VisualBasic"). CompileAssemblyFromFile (<options>, <.vb file dengan sintaks trik di atas di dalamnya>) ... Ada ide? Apakah ini hanya gula sintaksis VS 2010?
Chad
1
@romkyns Tidak benar, saya menemukan cara menggunakan CDATA dan masih dapat menanamkan menggunakan <% =%> Lihat di sini
Nelson
1
Luar biasa! Bagaimana Anda mempertahankan lekukan kode tanpa memasukkannya ke dalam literal di bawah sintaksis yang lebih baru?
Panzercrisis
50
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.
Jadi bagaimana cara kerjanya untuk XML literal? Entah itu mungkin, atau XML literal menggunakan teknik yang berbeda - dan jika teknik yang berbeda, maka yang dapat diperluas ke string multi-line.
mellamokb
1
@mellamokb XML literals adalah .. khusus karena tidak ada kata yang lebih baik. Compiler mengerti mereka dan karenanya akan memungkinkan mereka untuk span beberapa baris secara implisit. Tidak ada dukungan seperti itu ditambahkan untuk string multi-line. Menambahkan dukungan seperti itu jauh lebih mudah daripada literal XML, itu hanya tidak memenuhi bilah untuk rilis itu.
JaredPar
38
Saya menggunakan varian ini:
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()
String multi-line tersedia sejak Visual Studio 2015.
Dim sql AsString="
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Anda dapat menggabungkannya dengan interpolasi string untuk memaksimalkan kegunaan:
Dim primaryKey AsString="ID"Dim inventoryTable AsString="inventory"Dim sql AsString=$"
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.
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 ""
Terima kasih Lucian karena menambahkan string multi-line ke dalam VB. Mungkin Anda dapat memperbarui jawaban Anda, karena VS 2015 sekarang RTM. Dan mungkin Anda juga dapat menyodok seseorang di perusahaan Anda untuk memperbarui artikel MSDN terkait .
miroxlav
14
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
Dalam hal ini, Anda ingin menghindari penggabungan dan bukannya menggunakan parameter SQL karena mereka lebih baik dalam pengerasan terhadap serangan injeksi SQL. Saya bisa melihat ini berguna untuk generasi SQL dinamis, (tanpa meneruskan input pengguna).
Chad Levy
10
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")
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
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
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 asString= 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 AsString=<code><![CDATA[<script type="text/javascript">
var URL =']]><%= domain %><![CDATA[/mypage.html';</script>]]></code>.value
Anda perlu _ di akhir baris untuk setiap "Baris .." yang terlihat jelek.
Kenji Noguchi
2
Sebenarnya kamu tidak. Versi selanjutnya dari VB (2010 dan kemudian saya pikir?) Tidak memerlukan _ dalam banyak kasus, termasuk contoh yang ditunjukkan di sini.
Darryl
2
Anda dapat menggunakan XML untuk seperti ini
dim vrstr asstring=<s>
some words
some words
some
words
</s>
Namun belum didukung oleh R #. Berita baiknya adalah mereka akan segera didukung! Silakan pilih Youtrack untuk memberi tahu JetBrains bahwa Anda juga membutuhkannya.
Ini buruk. Anda baru saja membuat 4 instance string
TS
Saya mewarisi kode warisan VB6 yang harus saya porting ke VB.NET yang penuh dengan ini! :( Dalam hal ini saya lebih suka mengorbankan kinerja untuk menjaga keterbacaan.
Zac
Anda tidak harus melakukannya. Anda selalu dapat menggabungkan tanpa menetapkan ulang variabel, dan memformat dalam baris tersebut
TS
Dalam kasus saya tidak berlaku untuk beralih ke sintaks yang benar karena saya harus memodifikasi banyak kode dan tidak ada waktu tersisa pada proyek.
Zac
-1
Gunakan vbCrLfatau vbNewLine. Ini bekerja dengan MessageBoxes dan banyak kontrol lain yang saya uji.
Kamu yakin? Saya tahu mereka akan mengizinkan pernyataan multiline, tetapi apakah mereka akan mengizinkan string multiline juga? Maksud saya "halo <newline> dunia"?
Mehrdad Afshari
1
Penghapusan karakter kelanjutan garis dan string literal multi-baris adalah fitur yang berbeda.
JaredPar
-16
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.
Jawaban:
Anda dapat menggunakan XML Literals untuk mencapai efek yang serupa:
Ingat bahwa jika Anda memiliki karakter khusus, Anda harus menggunakan blok CDATA:
PEMBARUAN 2015:
Multi-line string literal diperkenalkan dalam Visual Basic 14 (dalam Visual Studio 2015 ). Contoh di atas sekarang dapat ditulis sebagai:
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.
sumber
s="... a=~someint~ ..."
lalus=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
Visual Studio 2010
sumber
Saya menggunakan varian ini:
itu memungkinkan <> dalam string
sumber
String multi-line tersedia sejak Visual Studio 2015.
Anda dapat menggabungkannya dengan interpolasi string untuk memaksimalkan kegunaan:
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.
sumber
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)
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 ""
sumber
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
sumber
Nah, karena Anda tampaknya menggunakan python, bolehkah saya menyarankan Anda menyalin teks Anda ke python, seperti:
lalu lakukan:
atau
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.
sumber
Literal string multi-line di vb.net menggunakan kelas XElement.
sumber
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:
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
sumber
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.
sumber
Anda bisa (harus?) Meletakkan string dalam file sumber daya (mis. "Proyek Saya" / Sumber Daya) dan kemudian mendapatkannya
sumber
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.
sumber
Anda dapat menggunakan XML untuk seperti ini
sumber
di Visual studio 2010 (VB NET) saya mencoba yang berikut dan berfungsi dengan baik
sumber
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.
sumber
Jika Anda memerlukan XML literal di VB.Net dengan variabel kode baris, ini adalah bagaimana Anda akan melakukannya:
sumber
Anda juga dapat menggunakan
System.Text.StringBuilder
kelas dengan cara ini:Kemudian Anda mendapatkan string multiline menggunakan:
sumber
Karena ini adalah masalah keterbacaan, saya telah menggunakan kode berikut:
sumber
Gunakan
vbCrLf
atauvbNewLine
. Ini bekerja dengan MessageBoxes dan banyak kontrol lain yang saya uji.Ini akan menampilkan dua MessageBox identik dengan 2 baris.
sumber
Tidak, VB.NET belum memiliki fitur seperti itu. Akan tersedia dalam iterasi VB berikutnya (visual basic 10) ( tautan )
sumber
jika itu seperti C # (saya tidak memiliki VB.Net diinstal) Anda dapat awalan string dengan @
ini juga berguna untuk hal-hal seperti @ "C: \ Windows \ System32 \" - ini pada dasarnya mematikan melarikan diri dan menghidupkan multiline.
sumber