我如何将一个字符串转换为Span<T>?
Span<char> mySpan = "My sample source string";
Span<T>
及其相关类已经包含在.NET Core 2.1中,因此无需安装其他NuGet包。
Dan Sorensen提供的答案在发布时是正确的,但现在已经过时。
对于字符串,扩展方法分别是AsSpan
和AsMemory
,它们返回ReadOnlySpan<char>
和ReadOnlyMemory<char>
。
显式的AsReadOnlySpan
已被删除,因为string
是不可变的,所以获取一个可写的Span<char>
没有意义。
您需要安装System.Memory NuGet包。
有针对字符串的扩展方法称为.AsSpan()或.AsReadOnlySpan(),可将字符串转换为适当的Span<T>。
示例:
Span<char> mySpan = "My sample source string".AsSpan();
ReadOnlySpan<char> myReadOnlySpan = "My read only string".AsReadOnlySpan();
来源: MSDN Channel 9 "C# 7.2: Understanding Span" (大约在第6分钟)
更新:此答案当时是正确的,但基于预览版本。请参见gfoidl在此页面上的更新答案获取当前流程。
如果你使用的是.NET Core/5+或已经安装了NuGet包(请查看其他答案),则可以按照以下方式从string
创建 Span<char>
:
string str = "My sample source string";
Span<char> mySpan = stackalloc char[str.Length]; // or `new char[str.Length]`
str.AsSpan().CopyTo(mySpan);
AsReadOnlySpan
,但是即使AsSpan
返回ReadOnlySpan
,也没有找到,唉。 - Mike-E