I've just spent the better part of the last hour scratching my
head over something so stupidly simple that its resulted in a sore
head (due to the obligatory banging of it against my desk numerous
times in frustration at the resolution)...
Basically, this is what caught me out... it seems VB.Net is a
little quirky when it comes to handling If.. Then
conditions.
One would think that the following statement:
If myPickupBooking.Type = (EBookingType.StorePickUp Or
EBookingType.StoreDropoff) Then ...
would equate to the same as this statement:
If (myPickupBooking.Type = EBookingType.StorePickUp) Or
(myPickupBooking.Type = EBookingType.StoreDropoff) Then
...
but this is not the case. As it turns out, the first
statement failed when the booking type was StorePickup... but the
second statement passes.
This has reaffirmed my suspicion that VB is really a language
for dummies that have to spell e.v.e.r.y.t.h.i.n.g. o.u.t. a.s.
v.e.r.b.o.s.e.l.y. a.s. i.s. h.u.m.a.n.l.y. p.o.s.s.i.b.l.e.
AAARRRGGGHHHHH
Okay, now that this little rant is out of the way, i'll get back
to some real work.
UPDATE: On further experimentation, i found that the
following statement...
Dimhello
As String =
"hello"
If hello =
("hello" Or "goodbye")
Then
MsgBox(hello)
End If
... throws an Invalid Cast Exception:
Conversion from string "Hello" to type 'Double' is not
valid.
This is because the Or operator compares either 2 boolean
values (True or False), or integers that are evaluated
Bitwise. If you mix the 2, VB.Net will treat the Boolean
value as though it were an Integer. Hence the invalid cast
exception above.
For more info about this, including some delving into the
geekiness of converting values to bits, see the following: