それが LengthInTextElements プロパティの目的だと思っていたでしょう。MSDNによると、このプロパティは次のとおりです。
この StringInfo オブジェクト内の基本文字、サロゲート ペア、結合文字シーケンスの数。
したがって、結合シーケンスを単一の文字としてカウントする必要があるように見えます。しかし、それが機能しないか、根本的に何かを誤解しています。このくだらないテストプログラム...
static void Main(string[] args)
{
string foo = "\u0301\u0065";
Console.WriteLine(string.Format("String:\t{0}", foo));
Console.WriteLine(string.Format("Length:\t{0}", foo.Length));
Console.WriteLine(string.Format("TextElements:\t{0}", new StringInfo(foo).LengthInTextElements));
Console.ReadLine();
}
この出力を生成します...
文字列: `e
長さ: 2
TextElements: 2
結合シーケンス「\u0301\u0065」を 1 文字として数えたいと思います。これは StringInfo で実行できますか?
さて、私は自分が間違っていたことを理解しました。それはやや恥ずかしいことです。文字と分音記号の順序を逆にしていました。したがって、次の非常に小さな変更を加えることで問題が修正されます。
static void Main(string[] args)
{
string foo = "\u0065\u0301";
Console.WriteLine(string.Format("String:\t{0}", foo));
Console.WriteLine(string.Format("Length:\t{0}", foo.Length));
Console.WriteLine(string.Format("TextElements:\t{0}", new StringInfo(foo).LengthInTextElements));
Console.ReadLine();
}
つまり...テストデータを正しくエンコードするだけの問題でした。