You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将char转换为ReadOnlySpan<char>?求无需创建数组或字符串的方案

将char转换为ReadOnlySpan的无额外分配方案

你已经掌握了两种char转ReadOnlySpan<char>的方式:

char fooChar = 'a';
ReadOnlySpan<char> fooReadOnlyCharFromString = fooChar.ToString(); // 隐式转换,会创建字符串实例
ReadOnlySpan<char> fooReadOnlyCharFromArray = new ReadOnlySpan<char>(new [] { fooChar }); // 创建单元素数组

确实存在不需要创建数组或字符串的实现方案,借助System.Runtime.InteropServices.MemoryMarshal类的CreateReadOnlySpan方法,就能直接基于单个char的内存生成ReadOnlySpan<char>,完全避免额外的内存分配:

using System.Runtime.InteropServices;

char fooChar = 'a';
ReadOnlySpan<char> fooReadOnlySpan = MemoryMarshal.CreateReadOnlySpan(ref fooChar, 1);

这个方法的核心是直接把单个char的内存地址作为Span的起始位置,指定长度为1,全程没有额外的对象创建或内存分配操作,是性能最优的实现方式。

另外,在C# 12及更高版本中,还可以用集合表达式写出更简洁的代码,编译器会自动优化为无额外分配的实现,直接指向目标char的内存:

char fooChar = 'a';
ReadOnlySpan<char> fooReadOnlySpan = [fooChar];

内容的提问来源于stack exchange,提问作者Rand Random

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:43:09