Чи є спосіб мати багаторядкові рядки в VB.NET, як Python
a = """
multi
line
string
"""
чи PHP?
$a = <<<END
multi
line
string
END;
Звичайно щось, що ні
"multi" & _
"line
Чи є спосіб мати багаторядкові рядки в VB.NET, як Python
a = """
multi
line
string
"""
чи PHP?
$a = <<<END
multi
line
string
END;
Звичайно щось, що ні
"multi" & _
"line
Відповіді:
Ви можете використовувати XML Literals для досягнення подібного ефекту:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Пам'ятайте, що якщо у вас є спеціальні символи, слід використовувати блок CDATA:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Багаторядкові рядкові літерали були введені в Visual Basic 14 (у Visual Studio 2015 ). Наведений вище приклад тепер можна записати так:
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.
Деталі додаються до сховища Github Roslyn New-Language-Features-in-VB-14 .
s="... a=~someint~ ..."і тоді s=s.Replace("~someint~', SomeInt).
VB.Net не має такої функції, і вона не з’явиться у Visual Studio 2010. Особливість, яку переробляє jirwin, називається неявним продовженням рядка. Це пов'язано з видаленням _ з багаторядкового оператора чи виразу. Це усуває необхідність припинення багаторядкової рядка з _, але в VB все ще немає багаторядкового рядкового рядка.
Приклад для багаторядкових рядків
Visual Studio 2008
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
Я використовував цей варіант:
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()
це дозволяє <> в рядку
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Ви можете комбінувати їх за допомогою рядкової інтерполяції, щоб досягти максимальної корисності:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Зверніть увагу , що інтерпольовані рядки починаються з $і ви повинні піклуватися про ", {і }що містяться всередині - перетворити їх в "", {{або }}відповідно.
Тут ви можете побачити фактичне виділення синтаксису інтерпольованих частин вищевказаного прикладу коду:
Якщо вам цікаво, чи їхнє розпізнавання редактором Visual Studio також працює з рефакторингом (наприклад, масове перейменування змінних), то ви маєте рацію, рефакторинг коду працює з ними. Не згадуючи, що вони також підтримують IntelliSense, підрахунок посилань або аналіз коду.
Багаторядкові рядкові літерали представлені у Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Потім ви можете скористатись попереднім переглядом VS2015, зараз - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (зауважте, що ви все ще можете використовувати VS2015, навіть якщо націлювати на старіші версія рамки .NET)
Dim multiline = "multi
line
string"
Рядки VB в основному зараз такі ж, як C # дослідні рядки - вони не підтримують зворотні похилі послідовності на зразок \ n, і вони дозволяють створювати нові рядки в рядку, і ви уникаєте символу цитати з подвійними лапками ""
це була для мене справді корисна стаття, але ніхто не згадав, як об'єднатись у випадку, якщо ви хочете надіслати деякі змінні, для чого вам потрібно займатися 99% часу.
... <% = змінна %> ...
Ось як це зробити:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Ну, оскільки ви, схоже, перебуваєте на своєму пітоні, я можу запропонувати вам скопіювати текст у python, наприклад:
s="""this is gonna
last quite a
few lines"""
тоді зробіть:
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")
або
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
то принаймні ви можете скопіювати це і помістити його у свій код VB. Бонусні бали, якщо ви зв'язали гарячу клавішу (найшвидше її отримати: Автоматична клавіша ), щоб зробити це для того, що є в буфері вставки. Ця ж ідея добре працює для форматера SQL.
Багаторядкові рядкові літерали в vb.net за допомогою класу 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
Мені це найбільше дратує VB як мова. Серйозно, я одного разу написав рядок у файл і щось написав у рядку:
Dim s as String = file_get_contents("filename.txt")
просто так я міг би перевірити запит безпосередньо на SQL сервері, якщо мені це потрібно.
Мій поточний метод - використовувати збережену процедуру на SQL сервері та просто зателефонувати, щоб я міг передати параметри запиту тощо
Я зрозумів, як використовувати обидва <! [CDATA [разом з <% = для змінних, що дозволяє без коду кодувати.
В основному вам потрібно припинити теги CDATA перед змінною VB, а потім знову додати її, щоб CDATA не захоплював код VB. Потрібно загортати весь код коду в тег, оскільки у вас буде кілька блоків CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Відмова: Я люблю пітон. Це багаторядкові рядки - лише одна причина.
Але я також роблю VB.Net, тож ось мій скоромовка для більш читаних довгих рядків.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
ви можете використовувати XML для подібного
dim vrstr as string = <s>
some words
some words
some
words
</s>
у Visual studio 2010 (VB NET) я пробую наступне та чудово працює
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 як частина Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Але ще не підтримується R #. Хороша новина - їх незабаром підтримають! Будь ласка, проголосуйте за Youtrack, щоб повідомити JetBrains, що вони також вам потрібні.
Якщо вам потрібен XML-літерал у VB.Net зі змінною кодового рядка, це робиться так:
<Tag><%= New XCData(T.Property) %></Tag>
Ви також можете використовувати System.Text.StringBuilderклас таким чином:
Dim sValue As New System.Text.StringBuilder
sValue.AppendLine("1st Line")
sValue.AppendLine("2nd Line")
sValue.AppendLine("3rd Line")
Потім ви отримуєте багаторядковий рядок, використовуючи:
sValue.ToString()
Оскільки це проблема читабельності, я використав такий код:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Використовуйте vbCrLfабо vbNewLine. Він працює з MessageBoxes та багатьма іншими тестовими контролями.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
На ній будуть показані два однакові повідомленнябокси з 2 рядками.
Ні, VB.NET ще не має такої функції. Він буде доступний у наступній ітерації VB (візуальний базовий 10), однак ( посилання )
якщо це як C # (у мене не встановлено VB.Net), ви можете встановити рядок з @
foo = @"Multiline
String"
це також корисно для таких речей, як @ "C: \ Windows \ System32 \" - воно по суті вимикає втечу і вмикається на багаторядковий.