VB.NET'te Python gibi çok satırlı dizelerin olmasının bir yolu var mı
a = """
multi
line
string
"""
veya PHP?
$a = <<<END
multi
line
string
END;
Tabii ki olmayan bir şey
"multi" & _
"line
VB.NET'te Python gibi çok satırlı dizelerin olmasının bir yolu var mı
a = """
multi
line
string
"""
veya PHP?
$a = <<<END
multi
line
string
END;
Tabii ki olmayan bir şey
"multi" & _
"line
Yanıtlar:
Benzer bir etki elde etmek için XML Değişmezlerini kullanabilirsiniz :
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Özel karakterleriniz varsa, bir CDATA bloğu kullanmanız gerektiğini unutmayın:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Çok satırlı dize değişmezleri Visual Basic 14'te ( Visual Studio 2015'te ) tanıtıldı . Yukarıdaki örnek şimdi şöyle yazılabilir:
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.
Ayrıntılar, Vlyn -in-VB-14 Github deposundaki Roslyn Yeni Dil Özellikleri'ne eklenir .
s="... a=~someint~ ..."sonra s=s.Replace("~someint~', SomeInt).
VB.Net böyle bir özelliği vardır ve olacaktır değil Visual Studio 2010 jirwin örtülü satır devam denir refering bu özelliği geliyor. _'Nin çok satırlı bir ifadeden veya ifadeden kaldırılmasıyla ilgilidir. Bu, _ ile çok satırlı bir dizeyi sonlandırma gereğini ortadan kaldırır, ancak VB'de hala çok satırlı dize değişmezi yoktur.
Çok satırlı dize örneği
Visual Studio 2008
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
Bu varyantı kullandım:
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()
dizede <>
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Yararlılığı en üst düzeye çıkarmak için bunları dize enterpolasyonu ile birleştirebilirsiniz :
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Not interpole dizeleri ile başlaması $ve özen gerekir ", {ve }içinde bulunan - dönüştürmek "", {{ya da }}sırasıyla.
Burada , yukarıdaki kod örneğinin enterpolasyonlu kısımlarının gerçek sözdizimi vurgulamasını görebilirsiniz :
Visual Studio düzenleyicisi tarafından tanınmasının da yeniden düzenleme ile çalışıp çalışmadığını merak ediyorsanız (örneğin, değişkenleri toplu olarak yeniden adlandırma), haklısınız, kod yeniden düzenleme bunlarla çalışır. IntelliSense, referans sayma veya kod analizini de desteklediklerinden bahsetmiyoruz.
Çok satırlı dize değişmezleri Visual Basic 14.0'da tanıtıldı - https://roslyn.codeplex.com/discussions/571884
Daha sonra şimdi VS2015 Önizlemesinde kullanabilirsiniz - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (daha eski bir hedefi hedeflerken bile VS2015'i kullanabileceğinizi unutmayın) .NET framework sürümü)
Dim multiline = "multi
line
string"
VB dizeleri temelde artık C # kelimesi kelimesine benziyor - \ n gibi ters eğik çizgi kaçış dizilerini desteklemiyorlar ve dizede yeni satırlara izin veriyorlar ve çift tırnak işareti ""
bu benim için gerçekten yararlı bir makaleydi, ancak hiç kimse bazı değişkenler göndermek istediğinizde nasıl birleştirileceğini söylemedi , bu da zamanın% 99'unu yapmanız gerekiyor.
... <% =% değişken >> ...
Bunu nasıl yapacağınız aşağıda açıklanmıştır:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Python'unuzda gibi göründüğünüz için, metninizi aşağıdaki gibi python'a kopyalamanızı önerebilir miyim:
s="""this is gonna
last quite a
few lines"""
sonra şunları yapın:
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")
veya
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
en azından bunu kopyalayıp VB kodunuza koyabilirsiniz. Yapıştırma tamponunuzda ne varsa bunun için bir kısayol tuşunu (en hızlı: Autohotkey ) bağlarsanız bonus puanlar . Aynı fikir bir SQL formatlayıcı için de işe yarar.
XElement sınıfını kullanarak vb.net'te çok satırlı dize değişmezleri.
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
Bana göre bu, dil olarak VB ile ilgili en sinir bozucu şey. Cidden, ben bir kez dize bir dosyaya yazdı ve satırları boyunca bir şey kodu yazdı:
Dim s as String = file_get_contents("filename.txt")
sadece bu yüzden gerekiyorsa doğrudan SQL sunucusunda sorgu test.
Şu anki yöntemim, SQL Server'da saklı bir yordamı kullanmak ve sadece sorguya vb.
Endişelenmeden kod yazmanıza olanak tanıyan değişkenler için hem <! [CDATA [ile birlikte <% = 'nin nasıl kullanılacağını anladım.
Temel olarak VATA değişkeninden önce CDATA etiketlerini sonlandırmanız ve ardından CDATA'nın VB kodunu yakalamaması için yeniden eklemeniz gerekir. Birden fazla CDATA bloğunuz olacağı için kod bloğunun tamamını bir etikete sarmanız gerekir.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Yasal Uyarı: Python'u seviyorum. Çok satırlı dizeleri sadece bir nedendir.
Ama ben de VB.Net yapıyorum, işte daha okunabilir uzun teller için kısayol.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
bunun için XML kullanabilirsiniz
dim vrstr as string = <s>
some words
some words
some
words
</s>
Visual Studio 2010'da (VB NET) aşağıdakileri deniyorum ve iyi çalışıyor
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>
Visual Basic 14'te Visual Studio 2015'in bir parçası olarak bulunur https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Ancak henüz R # tarafından desteklenmemektedir. İyi haber, yakında desteklenecekler! Lütfen ihtiyacınız olan JetBrains'e bildirmek için Youtrack'a oy verin .
VB.Net'te bir satır kodu değişkeni olan bir XML değişmezine ihtiyacınız varsa, bunu şu şekilde yapabilirsiniz:
<Tag><%= New XCData(T.Property) %></Tag>
Bu bir okunabilirlik sorunu olduğundan, aşağıdaki kodu kullandım:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
vbCrLfVeya tuşunu kullanın vbNewLine. MessageBoxes ve test ettiğim diğer birçok kontrol ile çalışır.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
2 satırlı iki özdeş MessageBoxes gösterecektir.
Hayır, VB.NET'in henüz böyle bir özelliği yok. Ancak VB'nin bir sonraki yinelemesinde mevcut olacak (visual basic 10) ( link )
C # gibi (VB.Net yüklü değilse) @ ile bir dize önek ekleyebilirsiniz
foo = @"Multiline
String"
bu da @ "C: \ Windows \ System32 \" gibi şeyler için kullanışlıdır - aslında kaçmayı kapatır ve çok satırlı açar.