Just to make it even clearer:
This code is correct:
abc = abc.Replace("DO", "AAA")
It does the replace and returns it, and we place it in a variable (which happens to be the same variable we started with).
This code is not correct:
abc.Replace("DO", "AAA")
It does the replace and returns it, but we do nothing with the return value, we just throw it away.
A very easy mistake to make, even if one knows it's wrong. The brain is a bit lazy sometimes, and tends to forget such details. I've done it myself, several times.
Perhaps an issue the compiler should raise a warning about? I can't see any reason under any circumstance to do it the wrong way, so a warning feels apropriate.