.NET Framework 2.0 の string のバグ?

今、C# の string クラスのインターフェースを真似て BREW 用の文字列クラスを作っている関係で、string クラスの仕様を一通り調べてたんだけど、なぜか string.LastIndexOf() がおかしな動作をする。

string str = "あいうえお";

// -1
str.IndexOf("あ", 5);
// -1
str.IndexOf('あ', 5);
// 0
str.LastIndexOf("あ", 5);
// 例外? ← 0 が返されて欲しい、もしくは↑の行で例外を投げて欲しい
str.LastIndexOf('あ', 5);

// 0
str.IndexOf("", 0);
// 5
str.IndexOf("", 5);
// 0
str.LastIndexOf("", 0);
// 4? ← 5 が返されて欲しい
str.LastIndexOf("", 5);
  1. 検索対象が string の場合は、str.Length の位置を検索してもちゃんと検索出来て、char の場合は例外が投げられる。
  2. string.Empty を渡すと本来は startIndex の値が返されるのだけれども、str.Length の位置を渡すと、str.Length - 1 の値が返される。

わんくまの掲示板にも投稿してみたんだけど、これが仕様なのかバグなのか分からないという罠。

http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=8362

これ、どうやって実装すりゃええのよ……(;´Д`)