Đây là một số mã khiến tôi phiền lòng mỗi lần tôi nghĩ về nó.VB vs C#: Tại sao điều này có thể xảy ra?
Option Strict On
Module Module1
Sub Main()
For Each i As Integer In New String() {"why", "is", "this", "tolerated?"}
' compiles just fine.
Next
End Sub
End Module
C# đơn giản sẽ không cho phép chuyển đổi chuỗi thành số nguyên một cách ngầm định.
class Program {
static void Main(string[] args) {
foreach (int i in new string[] {"that's", "better"}) {
// will not compile, and for good reason.
}
}
}
Tại sao VB cho phép chúng tôi làm điều đó? Tôi đang cố gắng để vui chơi với điều này bởi vì tôi vẫn còn tương đối mới ở đây, nhưng tôi cũng thực sự tò mò. Tôi chắc rằng có những nhà phát triển ở đó với câu trả lời.
tôi bao gồm các 'Tùy chọn Strict' tuyên bố trong bưu chính, đó là nghĩa vụ để hạn chế chuyển đổi loại để chuyển đổi mở rộng và không cho phép gõ ngầm, tuy nhiên nó vẫn biên dịch. – scottyeatscode
@mellamokb, như OP đã hiển thị, điều này hoạt động ngay cả với 'Tùy chọn Nghiêm ngặt On'. – jmcilhinney
Đó là một điểm tốt. Theo [bài blog này] (http://www.owenpellegrin.com/articles/vb-net/converting-strings-to-numbers/) ngay cả với 'Option Strict Off' nó không nên cho phép chuyển đổi ngầm của chuỗi là không phải là giá trị số hợp lệ, vì vậy một cái gì đó khác phải xảy ra ở đây.** EDIT **: Tôi chỉ cần thử nghiệm này một cách nhanh chóng với LINQPad và nó dường như không biên dịch ... nơi mà bạn đang thử nghiệm này, nơi bạn không nhận được lỗi trình biên dịch? – mellamokb