StringクラスにあるSubstring()というメソッドは,JavaのString#substring()とは,引数の意味が違ってました,だまされた.Javaだと
public String substring(int beginIndex, int endIndex)
とあるように開始インデックスから終了インデックスまでを指定するのに対し,
C#は
public string Substring(
int startIndex,
int length
);
と長さで選ぶらしい.なまじ同じ名前だからよけい紛らわしいです.