これは可能ですか?C# が不変の文字列を使用することを考えると、次の行に沿ったメソッドがあると予想できます。
var expensive = ReadHugeStringFromAFile();
var cheap = expensive.SharedSubstring(1);
そのような関数がない場合、わざわざ文字列を不変にする必要があるでしょうか? または、別の理由で文字列がすでに不変である場合、このメソッドを提供しないのはなぜでしょうか?
私がこれを調べている具体的な理由は、ファイルの解析を行っていることです。単純な再帰降下パーサー (TinyPG によって生成されたパーサーや、手で簡単に記述できるパーサーなど) は、あらゆる場所で Substring を使用します。これは、解析する大きなファイルを提供すると、信じられないほどのメモリ チャーンが発生することを意味します。確かに回避策はあります。基本的には独自の SubString クラスをロールしてから、もちろん、StartsWith などの String メソッドや Regex などの String ライブラリを使用できることを忘れるので、これらの独自のバージョンもロールする必要があります。ANTLR などのパーサー ジェネレーターは基本的にそれを行っていると思いますが、私のフォーマットは、そのようなモンスター ツールの使用を正当化できないほど単純です。TinyPG でさえ、おそらくやり過ぎです。
誰か、明らかな、またはそれほど明白ではない標準の C# メソッド呼び出しがどこかに欠けていると教えてください...