这可能吗?鉴于C#使用不可变字符串,人们可以预期会有一种方法:
var expensive = ReadHugeStringFromAFile();
var cheap = expensive.SharedSubstring(1);
Run Code Online (Sandbox Code Playgroud)
如果没有这样的功能,为什么还要使字符串不变?或者,如果字符串由于其他原因已经不可变,为什么不提供此方法呢?
我正在调查的具体原因是进行一些文件解析.简单的递归下降解析器(例如由TinyPG生成的解析器,或者易于手工编写的解析器)在整个地方使用Substring.这意味着如果你给他们一个大文件来解析,内存流失是令人难以置信的.当然有解决方法 - 基本上是滚动你自己的SubString类,然后当然忘记了能够使用诸如StartsWith之类的String方法或者像Regex这样的字符串库,所以你也需要推出自己的这些版本.我假设像ANTLR这样的解析器生成器基本上就是这样做的,但我的格式很简单,不能证明使用这样的怪物工具.即使是TinyPG也可能是一种矫枉过正.
有人请告诉我,我错过了一些明显或不那么明显的标准C#方法调用...