Вот какой-то код, который беспокоит меня каждый раз, когда я об этом думаю.VB vs C#: Почему это возможно?
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# просто не разрешает преобразовывать строки в целые числа неявно.
class Program {
static void Main(string[] args) {
foreach (int i in new string[] {"that's", "better"}) {
// will not compile, and for good reason.
}
}
}
Почему VB позволяет нам это делать? Я пытаюсь получить удовольствие от этого, потому что я все еще относительно новичок, но мне также очень любопытно. Я уверен, что там есть разработчики с ответом.
Я включил оператор 'Option Strict' в сообщение, и он должен ограничивать преобразования типов в расширяющиеся преобразования и запрещать неявное типирование, но он все еще компилируется. – scottyeatscode
@mellamokb, как показал OP, это работает даже с 'Option Strict On'. – jmcilhinney
Это хороший момент. Согласно [этому сообщению в блоге] (http://www.owenpellegrin.com/articles/vb-net/converting-strings-to-numbers/) даже с 'Option Strict Off' он не должен допускать неявное преобразование строк, которые недействительными числовыми значениями, поэтому здесь должно произойти что-то еще.** РЕДАКТИРОВАТЬ **: я просто быстро это протестировал с LINQPad, и он, похоже, не компилируется ... где вы тестируете это, когда вы не получаете ошибки компилятора? – mellamokb