.NET Framework 2.0以降では「々」の位置を間違えるらしい。(「愛が重ならない.NET Framework 2.0 – 新日々此何有哉」より。)
Console.WriteLine("{0}", "愛々,1,2,3".IndexOf(",")); //=> 1
Delphi XEとC++Builder XEで動作を確認しました。
# .Net FrameworkのIndexOfはインデックスが0から始まりますが、
# Delphi/C++BuilderのPosはインデックスが1から始まります。
Delphi XEの場合
Writeln(Pos('愛', '愛々,1,2,3')); //=>1
Writeln(Pos('々', '愛々,1,2,3')); //=>2
Writeln(Pos(',', '愛々,1,2,3')); //=>3
Writeln(Pos('1', '愛々,1,2,3')); //=>4
C++Builder XEの場合
std::cout << UnicodeString("愛々,1,2,3").Pos("愛") << std::endl; //=>1
std::cout << UnicodeString("愛々,1,2,3").Pos("々") << std::endl; //=>2
std::cout << UnicodeString("愛々,1,2,3").Pos(",") << std::endl; //=>3
std::cout << UnicodeString("愛々,1,2,3").Pos("1") << std::endl; //=>4
Delphi XEとC++Builder XEは問題ないようです。
(.NET Frameworkは詳しくないので、勘違いがあるかもしれません。)