2009-07-06 45 views
23

Tôi đã thấy một số lập trình viên sử dụng &+ để thao tác chuỗi.Thao tác chuỗi với & hoặc + trong VB.NET

Chẳng hạn như:

dim firstvar as string 
dim secondvar as string 
dim thirdvar as string 

thirdvar = firstvar & secondvar 

Hoặc là nó:

thirdvar = firstvar + secondvar 

Có vấn đề gì? Nếu vậy, tại sao?

+0

Có thể trùng lặp * [Sự khác biệt giữa + và & để tham gia chuỗi trong VB.NET] (http://stackoverflow.com/questions/734600/the-difference-between-and-for-joining-strings- trong vb-net) *. –

Trả lời

48

Các nhà điều hành +&không giống hệt nhau trong VB.NET.

Sử dụng toán tử & cho biết ý định của bạn để nối chuỗi, trong khi toán tử + cho biết ý định của bạn để thêm số. Sử dụng toán tử & sẽ chuyển đổi cả hai mặt của thao tác thành chuỗi. Khi bạn có các loại hỗn hợp (một bên của biểu thức là một chuỗi, một mặt khác là một số), việc sử dụng toán tử của bạn sẽ xác định kết quả.

1 + "2" = 3 'This will cause a compiler error if Option Strict is on' 
1 & "2" = "12" 
1 & 2 = "12" 
"text" + 2 'Throws an InvalidCastException since "text" cannot be converted to a Double' 

Vì vậy, phương châm của tôi (ngoài tránh các loại pha trộn như thế) là sử dụng & khi concatenating chuỗi, chỉ để chắc chắn rằng ý định của bạn là rõ ràng đối với trình biên dịch, và tránh không để tìm thấy lỗi liên quan đến sử dụng toán tử + để ghép nối.

+0

Cảm ơn bạn đã nhắc nhở. Tôi luôn quên điều đó (vì những lý do tôi đã mô tả trong bản chỉnh sửa mới của mình). –

+0

Cảm ơn bạn đã thanh toán bù trừ cho tôi! – ErocM

+0

Thực hiện tốt bdukes. Vì vậy, tôi đã chính xác sau khi tất cả, mặc dù tôi không biết điều đó, lol. –

2

Dấu và là phương pháp được đề xuất. Các nhà điều hành cộng sẽ làm việc, đôi khi, cho chuỗi nối nhưng không được coi là chính xác và đôi khi sẽ tạo ra kết quả ngoài ý muốn.

+0

Kết quả ngoài ý muốn? –

+0

Khi nào nó sẽ tạo ra kết quả không mong muốn? Vui lòng giải thích để có câu trả lời hoàn chỉnh. – jvanderh

+4

Điều đó không còn đúng trong VB.NET - VB6 và trước đó là theo cách này - vb.net sử dụng toán tử .NET runtime + trên chuỗi, được hỗ trợ một cách hoàn hảo. & là một bí danh cho điều này trong VB.NET. –

2

Chúng giống hệt nhau trong VB.NET khi làm việc với 2 chuỗi. Toán tử "&" có khả năng tương thích ngược trong VB 6 trở về trước, trong đó & là toán tử nối chuỗi và + không hoạt động đối với văn bản.

Có sự khác biệt nếu một trong hai toán hạng của bạn không phải là một chuỗi, là bdukes pointed out. Tuy nhiên, trong tình huống này, tôi khuyên bạn nên sử dụng String.Format hoặc StringBuilder (tùy thuộc vào số lượng/loại hoạt động) để xây dựng chuỗi kết quả từ các loại hỗn hợp.

Nói chung, tôi khuyên bạn nên sử dụng +, vì một lý do duy nhất. Nếu bạn quyết định dịch mã sang ngôn ngữ khác (ví dụ: C#), toán tử + sẽ khớp nhiều hơn với phiên bản đã dịch. Nó có thể sẽ dễ dàng hơn cho những người đến từ một ngôn ngữ khác để hiểu và làm theo mã của bạn.

+2

Chúng là _not_ giống hệt nhau trong VB.NET, xem câu trả lời của tôi cho các chi tiết cụ thể. – bdukes

+1

Điểm tốt - Tôi luôn luôn quên điều đó (mặc dù tôi không bao giờ thấy làm 1 và "2" như một cái gì đó mà tôi cho là phù hợp;)) –

+1

Phản hồi đã chỉnh sửa để đền bù. –

3

Nói chung, & sẽ luôn nối các chuỗi bất kể loại đối số, trong khi + sẽ không. Vì không có hạn chế trong việc sử dụng & trên + nếu không, trong các trường hợp bạn rõ ràng muốn ghép nối chuỗi, thì tốt hơn là nên. Nó cũng làm cho mục đích của mã hơi rõ ràng hơn.

5

Cân nhắc xem bạn có sử dụng String.Format tốt hơn khi ghép các chuỗi không. Thông thường, mã kết thúc có ý nghĩa hơn theo cách đó.

Ngoài ra, nếu bạn nối nhiều lần, hãy xem xét sử dụng StringBuilder thay vì String.

0

Bất kể nhiều gợi ý nào để "gắn vào một OR khác" - nó phụ thuộc nặng nề những gì bạn kết hợp.

Nói tóm lại, tôi sẽ sử dụng "&" cho chuỗi"+" chỉ dành cho hoạt động số học

Tại sao? Hãy xem https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/addition-operator#remarks

Tất cả các kết hợp này với chuyển đổi thành nghiêm ngặt -option giống như cuộn xúc xắc cho trình biên dịch ... và không bao giờ hiển nhiên đối với người đọc.

Tôi cũng sẽ thêm https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/concatenation-operators#differences-between-the-two-concatenation-operators với tuyên bố rõ ràng:

Toán tử + có mục đích chính của việc thêm hai con số.