Có cách nào để có các chuỗi nhiều dòng trong VB.NET như Python không
a = """
multi
line
string
"""
hay PHP?
$a = <<<END
multi
line
string
END;
Tất nhiên một cái gì đó không phải là
"multi" & _
"line
Có cách nào để có các chuỗi nhiều dòng trong VB.NET như Python không
a = """
multi
line
string
"""
hay PHP?
$a = <<<END
multi
line
string
END;
Tất nhiên một cái gì đó không phải là
"multi" & _
"line
Câu trả lời:
Bạn có thể sử dụng XML Literals để đạt được hiệu ứng tương tự:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Hãy nhớ rằng nếu bạn có các ký tự đặc biệt, bạn nên sử dụng khối CDATA:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Chuỗi ký tự nhiều dòng được giới thiệu trong Visual Basic 14 (trong Visual Studio 2015 ). Ví dụ trên có thể được viết là:
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.
Thông tin chi tiết được thêm vào kho lưu trữ Rosith New-Language-Feature-in-VB-14 Github.
s="... a=~someint~ ...", sau đó s=s.Replace("~someint~', SomeInt).
VB.Net không có tính năng này và nó sẽ không xuất hiện trong Visual Studio 2010. Tính năng mà jirwin đang giới thiệu được gọi là tiếp tục dòng ngầm. Nó phải thực hiện với việc loại bỏ _ khỏi một câu lệnh hoặc biểu thức nhiều dòng. Điều này không loại bỏ sự cần thiết phải chấm dứt một chuỗi nhiều dòng bằng _ nhưng vẫn không có chuỗi ký tự nhiều dòng trong VB.
Ví dụ cho chuỗi đa dòng
Phòng thu hình ảnh 2008
Dim x = "line1" & vbCrlf & _
"line2"
Studio hình ảnh 2010
Dim x = "line1" & vbCrlf &
"line2"
Tôi đã sử dụng biến thể này:
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()
nó cho phép <> trong chuỗi
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Bạn có thể kết hợp chúng với phép nội suy chuỗi để tối đa hóa sự hữu ích:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Lưu ý rằng chuỗi nội suy bắt đầu với $và bạn cần phải chăm sóc ", {và }chứa đựng bên trong - chuyển đổi chúng thành "", {{hoặc }}tương ứng.
Ở đây bạn có thể thấy đánh dấu cú pháp thực tế của các phần được nội suy của ví dụ mã trên:
Nếu bạn tự hỏi liệu trình nhận dạng Visual Studio của họ có hoạt động với tái cấu trúc không (ví dụ đổi tên hàng loạt các biến), thì bạn đã đúng, tái cấu trúc mã hoạt động với các biến này. Không đề cập đến việc họ cũng hỗ trợ IntelliSense, đếm tham chiếu hoặc phân tích mã.
Chuỗi ký tự nhiều dòng được giới thiệu trong Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Bạn có thể sử dụng sau đó trong Bản xem trước VS2015, ngay bây giờ - http://www.visualstudio.com/en-us/doads/visual-studio-2015-doads-vs (lưu ý rằng bạn vẫn có thể sử dụng VS2015 ngay cả khi nhắm mục tiêu cũ phiên bản của .NET framework)
Dim multiline = "multi
line
string"
Các chuỗi VB về cơ bản bây giờ giống như các chuỗi nguyên văn C # - chúng không hỗ trợ các chuỗi thoát dấu gạch chéo ngược như \ n và chúng cho phép các dòng mới trong chuỗi và bạn thoát biểu tượng trích dẫn bằng dấu ngoặc kép ""
đây là một bài viết thực sự hữu ích cho tôi, nhưng không ai đề cập đến cách nối trong trường hợp bạn muốn gửi một số biến, đó là điều bạn cần làm 99% thời gian.
... <% = biến %> ...
Đây là cách bạn làm điều đó:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Chà, vì dường như bạn đang ở trên con trăn của mình, tôi có thể đề nghị bạn sao chép văn bản của bạn vào con trăn, như:
s="""this is gonna
last quite a
few lines"""
sau đó làm một:
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")
hoặc là
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
sau đó ít nhất bạn có thể sao chép nó ra và đặt nó vào mã VB của bạn. Điểm thưởng nếu bạn liên kết một phím nóng (nhanh nhất để có được: Autohotkey ) để làm điều này cho bất cứ điều gì có trong bộ đệm dán của bạn. Ý tưởng tương tự hoạt động tốt cho một trình định dạng SQL.
Chuỗi ký tự nhiều dòng trong vb.net bằng cách sử dụng lớp XEuity.
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
Đối với tôi đó là điều khó chịu nhất về VB như một ngôn ngữ. Nghiêm túc mà nói, tôi đã từng viết chuỗi trong một tập tin và viết mã gì đó dọc theo dòng:
Dim s as String = file_get_contents("filename.txt")
chỉ để tôi có thể kiểm tra truy vấn trực tiếp trên máy chủ SQL nếu tôi cần.
Phương pháp hiện tại của tôi là sử dụng một thủ tục được lưu trữ trên SQL Server và chỉ cần gọi nó để tôi có thể truyền tham số cho truy vấn, v.v.
Tôi đã tìm ra cách sử dụng cả <! [CDATA [cùng với <% = cho các biến, cho phép bạn viết mã mà không phải lo lắng.
Về cơ bản, bạn phải chấm dứt các thẻ CDATA trước biến VB và sau đó thêm lại nó sau để CDATA không thu được mã VB. Bạn cần phải bọc toàn bộ khối mã trong một thẻ vì bạn sẽ có nhiều khối CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Tuyên bố từ chối trách nhiệm: Tôi yêu trăn. Đó là chuỗi nhiều dòng chỉ là một lý do.
Nhưng tôi cũng làm VB.Net, vì vậy đây là phần rút gọn của tôi để có chuỗi dài dễ đọc hơn.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
bạn có thể sử dụng XML cho việc này như thế nào
dim vrstr as string = <s>
some words
some words
some
words
</s>
trong Visual studio 2010 (VB NET) tôi thử các cách sau và hoạt động tốt
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>
Có sẵn trong Visual Basic 14 như một phần của Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Nhưng chưa được hỗ trợ bởi R #. Tin tốt là họ sẽ được hỗ trợ sớm! Vui lòng bỏ phiếu trên Youtrack để thông báo cho JetBrains bạn cũng cần chúng.
Nếu bạn cần một chữ XML trong VB.Net với biến mã dòng, đây là cách bạn sẽ làm điều đó:
<Tag><%= New XCData(T.Property) %></Tag>
Vì đây là vấn đề dễ đọc, tôi đã sử dụng đoạn mã sau:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Sử dụng vbCrLfhoặc vbNewLine. Nó hoạt động với MessageBoxes và nhiều điều khiển khác mà tôi đã thử nghiệm.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
Nó sẽ hiển thị hai MessageBoxes giống hệt nhau với 2 dòng.
Không, VB.NET chưa có tính năng như vậy. Nó sẽ có sẵn trong lần lặp tiếp theo của VB (hình ảnh cơ bản 10) tuy nhiên ( liên kết )
nếu nó giống như C # (Tôi chưa cài đặt VB.Net), bạn có thể thêm tiền tố vào một chuỗi với @
foo = @"Multiline
String"
điều này cũng hữu ích cho những thứ như @ "C: \ Windows \ System32 \" - về cơ bản nó sẽ tắt thoát và bật multiline.