namespace GFramework.Core.extensions; /// /// Span 和 ReadOnlySpan 扩展方法,提供零分配的高性能操作 /// public static class SpanExtensions { /// /// 尝试将字符 span 解析为指定类型 /// /// 目标类型,必须实现 ISpanParsable 接口 /// 要解析的字符 span /// 解析结果,失败时为 default(T) /// 如果解析成功返回 true,否则返回 false /// /// /// ReadOnlySpan<char> span = "123"; /// if (span.TryParseValue<int>(out var result)) /// { /// Console.WriteLine(result); // 123 /// } /// /// public static bool TryParseValue(this ReadOnlySpan span, out T result) where T : ISpanParsable { return T.TryParse(span, null, out result); } /// /// 计算 span 中指定值出现的次数 /// /// 元素类型,必须实现 IEquatable 接口 /// 要搜索的 span /// 要计数的值 /// 值出现的次数 /// /// /// ReadOnlySpan<int> span = stackalloc int[] { 1, 2, 3, 2, 1 }; /// var count = span.CountOccurrences(2); // 2 /// /// public static int CountOccurrences(this ReadOnlySpan span, T value) where T : IEquatable { var count = 0; foreach (var item in span) { if (item.Equals(value)) count++; } return count; } }