Tag: 子字符串

在C#字符串对象之间共享字符缓冲区

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