为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ReadOnlySpan<char> 处理转义序列

使用 ReadOnlySpan<char> 处理转义序列

C#
Smart猫小萌 2021-10-09 10:11:22
在ReadOnlySpan<char>被认为是完美的解析,所以我尝试使用它,我遇到一个用例来了,我不知道如何处理。我有一个命令行string,其中参数前缀-和分隔符(空格)被转义(我知道我可以在这里引用它们,但为了这个问题,我们假设它不是一个选项): var str = @"foo -bar \-baz\ qux".AsMemory();分词器应返回以下标记:foo - 命令名称bar - 参数名称-baz qux - 参数值Cases 1&2很简单,因为在这里我可以使用,str.Slice(i, length)但如何创建3rd案例并只返回一个ReadOnlySpan<char>?该Slice方法不允许我指定多个start/length范围,这是跳过转义字符所必需的\。例子:str.Slice((10, 4), (15, 3));哪里(10,4) = "-bar"和(15,3) = " qux"有了StringBuilder你可以跳过几个字符和Append其他人后。我将如何获得相同的结果ReadOnlySpan<char>?
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

ASpan/ReadOnlySpan是连续的内存块。它不能包含多个范围。这种设计对于性能来说是必要的。Span/ReadOnlySpan应该与数组大致一样快。数组很快,因为它们是连续的内存块,没有进一步的抽象。

如果不分配新字符串,我看不出有什么方法可以做到这一点。您可以Span/ReadOnlySpan用于所有连续的子字符串,但您的解析问题似乎不适合使用 span 来存储结果。


查看完整回答
反对 回复 2021-10-09
  • 2 回答
  • 0 关注
  • 543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信