通过 Span<T> 实现子字符串
Substring implementation via Span<T>
当应该利用 Span<T>
时,SubstringFromStart
方法的实现会是什么样子?假设 substringLength <= input.Length
:
ReadOnlySpan<char> span = input.AsSpan().Slice(0, substringLength);
return new string(span.ToArray());
这是要走的路吗?有没有比new string(span.ToArray())
更好更简洁的方法?
Is this the way to go?
不,在这里使用 Span<T>
没有用,因为您需要一个字符数组作为字符串构造函数(还有 none 接受 Span<char>
)。
如果满足以下条件,您将在此处使用 Span<T>
受益:
- 你会 return
Span<char>
,而不是 string
。那么你就不需要字符串分配了;
- 您收到一个
Span<char>
作为输入,您永远不需要将它具体化为一个数组,或者您不需要中间具体化(例如,当将它传递给方法时)。
当应该利用 Span<T>
时,SubstringFromStart
方法的实现会是什么样子?假设 substringLength <= input.Length
:
ReadOnlySpan<char> span = input.AsSpan().Slice(0, substringLength);
return new string(span.ToArray());
这是要走的路吗?有没有比new string(span.ToArray())
更好更简洁的方法?
Is this the way to go?
不,在这里使用 Span<T>
没有用,因为您需要一个字符数组作为字符串构造函数(还有 none 接受 Span<char>
)。
如果满足以下条件,您将在此处使用 Span<T>
受益:
- 你会 return
Span<char>
,而不是string
。那么你就不需要字符串分配了; - 您收到一个
Span<char>
作为输入,您永远不需要将它具体化为一个数组,或者您不需要中间具体化(例如,当将它传递给方法时)。