for (unsigned int i = foo.Length()-1; i >= 0; --i) ...

この書き方がforの再初期化を必ず使わなきゃいけないという頭カチカチの発想なだけで

for (unsigned int i = foo.Length(); i > 0; ) {
--i;
...

こうすればいいだけ
foo.Length()-1 を不自然に思わないのがそもそもおかしい