using System.Collections; using System.Collections.Concurrent; namespace Milimoe.FunGame.Core.Api.Utility { public class ConcurrentModelList : IEnumerable { /// /// 目前的Model数量 /// public int Count => Models.Count; /// /// 最大接受的Model数量 /// private int MaxModel { get; } /// /// 可参与高并发的字典,但添加效率较低 /// private ConcurrentDictionary Models { get; } = []; /// /// Init ModelManager /// /// MaxModel public ConcurrentModelList(int MaxModel = 0) { if (MaxModel <= 0) this.MaxModel = Library.Constant.General.MaxTask_2C2G; else { this.MaxModel = MaxModel; } } /// /// 获取Model对象 /// /// Model的Key /// Model对象 public T this[string name] => Models[name]; /// /// 向Model管理器中添加Model /// /// Model的Key /// Model对象 /// True:操作成功 public bool Add(string name, T t) { if (Models.Count + 1 > MaxModel) return false; return Models.TryAdd(name, t); } /// /// 从Model管理器中移除Model /// /// Model的Key /// True:操作成功 public bool Remove(string name) { return Models.TryRemove(name, out _); } /// /// 将Model移除,并取得这个Model /// /// Model的Key /// Model对象 /// 被移除的Model public bool Remove(string name, ref T? t) { return Models.TryRemove(name, out t); } /// /// 将Model移除,并取得这个Model /// /// Model的Key /// 被移除的Model public T? RemoveAndGet(string name) { Models.TryRemove(name, out T? result); return result; } public bool ContainsKey(string name) { return Models.ContainsKey(name); } /// /// 清空Model管理器 /// public void Clear() { Models.Clear(); } /// /// 获取Model对象的列表 /// public List GetList() { return [.. Models.Values]; } public IEnumerator GetEnumerator() { foreach (T instance in Models.Values) { yield return instance; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }