GeWuYou e2dca4f5a6 feat(events): 添加事件优先级和传播控制功能
- 实现了事件优先级机制,支持按优先级顺序执行事件处理器
- 新增EventPropagation枚举,支持All、UntilHandled和Highest三种传播模式
- 添加Register方法的重载版本,支持指定事件处理器优先级
- 实现Send方法的重载版本,支持指定事件传播模式
- 新增PriorityEvent类处理带优先级的事件逻辑
- 添加IocContainer的CreateScope方法支持服务作用域管理
- 实现RegisterTransient和RegisterScoped方法完善依赖注入生命周期
- 新增SpanExtensions扩展方法提供高性能的span操作功能
- 添加全面的单元测试覆盖事件优先级、IoC容器生命周期和span扩展功能
2026-02-25 21:39:53 +08:00

53 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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