【发布时间】:2018-07-15 07:47:26
【问题描述】:
ReadOnlySpan<char> 据说非常适合解析,所以我尝试使用它,但遇到了一个我不知道如何处理的用例。
我有一个命令行string,其中参数前缀- 和分隔符(空格)被转义(我知道我可以在这里引用它们但是为了这个问题让我们假设这不是一个选项):
var str = @"foo -bar \-baz\ qux".AsMemory();
标记器应返回以下标记:
-
foo- 命令名称 -
bar- 参数名称 -
-baz qux- 参数值
案例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> 获得相同的结果?
【问题讨论】:
-
Slice 方法不允许我指定多个开始/长度范围我不太明白你的意思。你能解释一下吗?此外,在这里使用 span 似乎就像用大锤击打苍蝇一样,如果你想规定分配 span 和内存很棒,但这只是一个命令行 arg,而且你似乎无论如何都必须遍历 span .
-
@TheGeneral 在这里使用 span 似乎就像用大锤击打苍蝇 - 我知道 - 在这种情况下这可能是真的但是
Sytem.Memory包是相当新的并且你已经以某种方式开始了,所以我选择了一个非常简单的用例来使用,所以让我们暂时忘记还有其他方法;-) 多个start/lengh我的意思是这样的str.Slice((10, 4), (15, 3));,其中(10,4) = "-bar"和(15,3) = " qux".
标签: c# parsing system.memory