Dim s as string = string.empty If ( s = nothing ) then ' Do something End ifThe condition was met whether s was nothing or empty!
Paul also mentioned that changing the condition to:
If ( s is nothing ) then ' Do something End ifWhich worked as expected - would pass for a null string and fail for an empty string.
We also discussed use of:
IsNullOrEmpty()
...which is a much more convenient method of checking for nothing and empty.
Another colleague Simon noted that he usually uses the (hangover from vb6)
Len()...function which exhibits the same behaviour as is-null-or-empty!
A bit of digging with reflector and a look at the IL turned up some surprising facts (if the reflected code is to be trusted).
The statement
If ( s = nothing ) Then '(where s is a variable of type string) End If...emits as:
VisualBasic.CompilerServices.Operators::CompareString()...Whereas the statement
If (s is nothing) Then End If...emits as: ceq – compare equal instruction
Already it’s clear that the “is nothing” statement is preferable in this context (and not just because it works as expected)!
Reflecting Compare-String shed some light on the behaviour (I looked at v8 of this assembly)
(Abridged)
if (Right == null) { if (Left.Length == 0) { return 0; } return 1; }
Looking at the "len" function and is-null-or-empty confirmed that they do the same thing and should both be the same performance – though I would still use the latter as it’s clearer.
public static int Len(string Expression) { if (Expression == null) { return 0; } return Expression.Length; } public static book IsNullOrEmpty(string value) { if (value !=null) { return (value.Length== 0); } return true; }
No comments:
Post a Comment