Just an addition to Marco Daniel's excellent answer.
The technique with \edef is perfectly fine if all we need is to append (or prepend, or both) to a string of characters. It can work with other tokens, but let's limit ourselves to a simple application:
\def\mystring{} % initialize
\def\extendmystring#1#2{\edef\mystring{#1\mystring#2}}
Then
\extendmystring{I love rain}{}
\extendmystring{}{, but not too much.}
\extendmystring{``}{''}
would result in \mystring expanding to
``I love rain, but not too much.''
However this is not the right tool if you want to preserve the structure of what we're storing.
The command \textit (which should be used instead of \it in your example) expands into the instructions needed for persuading TeX into printing the argument in italic type. Even if \textit survived in \edef, you'd lose some information.
Let's see an example which somewhat works with \edef. The code
\def\mand#1#2{#1 and #2} % "macro and"
\def\mystring{I love \mand{rain}{snow}} % reinitialize
\extendmystring{``}{, but not too much.''}
will result in \mystring expanding to
``I love rain and snow, but not too much.''
and the information that "rain" and "snow" are arguments to \mand is completely lost. In a real world application, one might rely on having \mand in the replacement text and redefine it before expanding (using) \mystring; if \mand is retained, it would be easy to say
\def\mand#1#2{#2}
and using \mystring would print
``I love snow, but not too much.''
while keeping the information intact in \mystring. This won't happen with the \edef technique.
The problem is that \edef expands macros (expandable tokens, to be precise) all the way down to unexpandable tokens. Macros like \textit (as well as the obsolete \it) don't survive an \edef for reasons that are rather difficult to explain in a few words.
If you want to preserve information, then the \preto and \appto road is surely better.
\bf, you should also be careful with local versus global definitions. Either the macro is local (so\defand\edef), or global (so\gdefand\xdef, as 'abbreviations' for\global\defand\global\edef). – Joseph Wright Sep 30 '12 at 07:54