NetStandard 2.0环境下如何不转字符串实现Span<Char>反转
NetStandard 2.0 无GC实现Span反转的方案
- 前置依赖:确保项目已安装
System.MemoryNuGet包,这是NetStandard 2.0官方提供的Span<T>支持依赖,无额外运行时开销。
以下是可直接使用的扩展方法实现:
public static class SpanExtensions { /// <summary> /// 反转Span<char>中的字符顺序,无堆分配,兼容NetStandard 2.0 /// </summary> public static void Reverse(this Span<char> span) { if (span.Length <= 1) { return; } int leftIndex = 0; int rightIndex = span.Length - 1; // 首尾双指针交换,直接操作原始内存,无GC触发 while (leftIndex < rightIndex) { char temp = span[leftIndex]; span[leftIndex] = span[rightIndex]; span[rightIndex] = temp; leftIndex++; rightIndex--; } } }
实现特性
- 完全无堆分配:所有变量均为值类型,操作直接作用于
Span<char>指向的原始内存块,不会触发垃圾回收,满足要求。 - 语法完全兼容NetStandard 2.0:没有使用高版本独有的语言特性,可直接复制到项目中使用。
- 调用方式和官方方法一致:直接通过
yourCharSpan.Reverse()调用,不需要调整原有业务逻辑。 - 性能够用:即使后续调用频率提升,该实现的性能也能满足绝大多数场景需求。
内容的提问来源于stack exchange,提问作者Menelaos Vergis
相关产品推荐
相关产品推荐

