如何将 C# 字符串转换为 Span<char>?(Span<T>)

40

我如何将一个字符串转换为Span<T>?

Span<char> mySpan = "My sample source string";
3个回答

52

Span<T>及其相关类已经包含在.NET Core 2.1中,因此无需安装其他NuGet包。

Dan Sorensen提供的答案在发布时是正确的,但现在已经过时。 对于字符串,扩展方法分别是AsSpanAsMemory,它们返回ReadOnlySpan<char>ReadOnlyMemory<char>

显式的AsReadOnlySpan已被删除,因为string是不可变的,所以获取一个可写的Span<char>没有意义。


谢谢您的回答。我正在直接搜索 AsReadOnlySpan,但是即使 AsSpan 返回 ReadOnlySpan,也没有找到,唉。 - Mike-E

23

您需要安装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在此页面上的更新答案获取当前流程。


恰当的做法是归属提供给你该链接的 SO 用户。 - Hans Passant
汉斯:你是指MSDN源链接吗?我自己找到了那个链接。我把它添加到我的答案中,以便提醒我解决方案的来源。 - Dan Sorensen
另一个丹尼尔添加了NuGet软件包链接。谢谢你,丹尼尔! - Dan Sorensen
丹尼尔:我希望我能授予你这个答案的信用。你是对的,这个步骤非常重要。 - Dan Sorensen

3

如果你使用的是.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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接