Why not start with a "How Stupid..."?
I have been working in both VFP and .NET lately, and recently had a "blonde" moment due to the fact that in VFP, everything is 1-based, whereas in .NET, everything is 0-based.
In VFP, if you want to search for a string within a string, VFP has a function called AT(), which returns the starting point of the string within the string. If the string cannot be found, AT() returns 0.
I wanted to create the .NET equivalent of the following VFP code:
lcEmailMessageBody = "<html> ...."
IF AT("<html",lcEmailMessageBody)>0 THEN
SendHTMLMail(lcEmailMessageBody)
ELSE
SendTextMail(lcEmailMessageBody)
ENDIF
So I create the following .NET equivalent:
lcEmailMessageBody = "<html>....";
if(lcEmailMessageBody.IndexOf("<html")>0)
SendHTMLMail(lcEmailMessageBody);
else
SendTextMail(lcEmailMessageBody);
Pretty straightforward, n'est-ce pas?
AAANNNN - wrong! When I ran this code, it only sent text mail.
***HEADSLAP***
Since strings in .NET are 0-based, a return value of 0 from IndexOf() means that the string was found in the first character of the string (character position 0 in the string). A return value of-1 means that the string is not found. so the proper if-statement is:
if(lcEmailMessageBody.IndexOf("<html")!=-1)
The funny part is that before I got slapped, I created another project to test it there, andthen asked a colleague if he got the same result on his computer. And as the words came out of my mouth, I realized the mistake, and braced myself for the slap.
I have been working in both VFP and .NET lately, and recently had a "blonde" moment due to the fact that in VFP, everything is 1-based, whereas in .NET, everything is 0-based.
In VFP, if you want to search for a string within a string, VFP has a function called AT(), which returns the starting point of the string within the string. If the string cannot be found, AT() returns 0.
I wanted to create the .NET equivalent of the following VFP code:
lcEmailMessageBody = "<html> ...."
IF AT("<html",lcEmailMessageBody)>0 THEN
SendHTMLMail(lcEmailMessageBody)
ELSE
SendTextMail(lcEmailMessageBody)
ENDIF
So I create the following .NET equivalent:
lcEmailMessageBody = "<html>....";
if(lcEmailMessageBody.IndexOf("<html")>0)
SendHTMLMail(lcEmailMessageBody);
else
SendTextMail(lcEmailMessageBody);
Pretty straightforward, n'est-ce pas?
AAANNNN - wrong! When I ran this code, it only sent text mail.
***HEADSLAP***
Since strings in .NET are 0-based, a return value of 0 from IndexOf() means that the string was found in the first character of the string (character position 0 in the string). A return value of-1 means that the string is not found. so the proper if-statement is:
if(lcEmailMessageBody.IndexOf("<html")!=-1)
The funny part is that before I got slapped, I created another project to test it there, andthen asked a colleague if he got the same result on his computer. And as the words came out of my mouth, I realized the mistake, and braced myself for the slap.
Comments