namespace XFEExtension.NetCore.FormatExtension; /// /// XFE可重复字典存储 /// public class XFEMultiDictionary : ICollection { private List xFEMultiDictionaryList = []; /// /// 字典中的条目数 /// (T)item.Property public int Count => xFEMultiDictionaryList.Count; /// /// 只读 /// public bool IsReadOnly => false; /// /// 从字符串中加载字典 /// /// public void Load(string dictionaryString) { xFEMultiDictionaryList = ToList(dictionaryString); } /// /// 追加条目 /// /// 条目对象 public void Add(XFEEntry entry) { xFEMultiDictionaryList.Add(entry); } /// /// 追加条目 /// /// 条目字符串 public void Add(string entryString) { var entry = XFEEntry.ToEntry(entryString); if (entry is not null) xFEMultiDictionaryList.Add(entry); } /// /// 追加条目 /// /// 头 /// 内容 public void Add(string header, string content) { xFEMultiDictionaryList.Add(new XFEEntry(header, content)); } /// /// 追加字典 /// /// 字典对象 public void AddRange(List collection) { xFEMultiDictionaryList.AddRange(collection); } /// /// 追加字典 /// /// 字典字符串 public void AddRange(string dictionaryString) { xFEMultiDictionaryList.AddRange(ToList(dictionaryString)); } /// /// 插入条目 /// /// 插入位置 /// 条目 public void Insert(int index, XFEEntry entry) { xFEMultiDictionaryList.Insert(index, entry); } /// /// 插入条目 /// /// 插入位置 /// 条目 public void Insert(int index, string entryString) { var entry = XFEEntry.ToEntry(entryString); if (entry is not null) xFEMultiDictionaryList.Insert(index, entry); } /// /// 插入条目 /// /// 插入位置 /// 头 /// 内容 public void Insert(int index, string header, string content) { xFEMultiDictionaryList.Insert(index, new XFEEntry(header, content)); } /// /// 清空字典 /// public void Clear() { xFEMultiDictionaryList.Clear(); } /// /// 检测是否包含 /// /// 条目对象 /// public bool Contains(XFEEntry item) { return xFEMultiDictionaryList.Contains(item); } /// /// 检测是否包含头 /// /// 指定头 /// public bool Contains(string headerString) { return xFEMultiDictionaryList.Find(x => x.Header == headerString) is not null; } /// /// 检测是否包含内容 /// /// 指定内容 /// public bool ContainContent(string contentString) { return xFEMultiDictionaryList.Find(x => x.Content == contentString) is not null; } /// /// 复制 /// /// 条目数组 /// 索引 public void CopyTo(XFEEntry[] array, int arrayIndex) { xFEMultiDictionaryList.CopyTo(array, arrayIndex); } /// /// 获取内容 /// /// 头 /// public List GetContents(string header) { var list = new List(); xFEMultiDictionaryList.FindAll(x => x.Header == header)?.ForEach(y => list.Add(y.Content)); return list; } /// /// 获取索引器 /// /// public IEnumerator GetEnumerator() { return xFEMultiDictionaryList.GetEnumerator(); } /// /// 移除指定的条目 /// /// 条目对象 /// public bool Remove(XFEEntry item) { return xFEMultiDictionaryList.Remove(item); } /// /// 移除指定的条目 /// /// 头 /// public bool Remove(string headerString) { var entry = xFEMultiDictionaryList.Find(x => x.Header == headerString); if (entry is not null) return xFEMultiDictionaryList.Remove(entry); else return false; } /// /// 移除指定范围的数组 /// /// 起始位置 /// 移除长度 public void RemoveRange(int startIndex, int count) { xFEMultiDictionaryList.RemoveRange(startIndex, count); } /// /// 索引器 /// /// 头 /// public string? this[string headerString] { get { return xFEMultiDictionaryList.Find(x => x.Header == headerString)?.Content; } set { if (value is not null) { var entry = xFEMultiDictionaryList.Find(x => x.Header == headerString); if (entry is not null) entry.Content = value; } } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return xFEMultiDictionaryList.GetEnumerator(); } /// /// 转换为字符串 /// /// public override string ToString() { string result = ""; foreach (var entry in xFEMultiDictionaryList) { result += entry.ToString(); } return result; } /// /// 将字符串转换为XFEEntry的List /// /// 字符串 /// protected static List ToList(string dictionaryString) { List xFEList = []; string[] messages = dictionaryString.Split(XFEDictionary.DictionarySeparator, StringSplitOptions.None); foreach (string message in messages) { string[] xFEDictionaryString = message.Split(XFEDictionary.EntrySeparator, StringSplitOptions.None); if (xFEDictionaryString.Length == 5) { xFEList.Add(new XFEEntry(xFEDictionaryString[1].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|"), xFEDictionaryString[3].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|"))); } } return xFEList; } /// /// 将字符串转换为XFEMultiDictionary /// /// 字符串 /// public static XFEMultiDictionary ToMultiDictionary(string dictionaryString) { return new XFEMultiDictionary(ToList(dictionaryString)); } /// /// XFE字典存储 /// /// 条目列表 public XFEMultiDictionary(List xFEDictionaryList) { xFEMultiDictionaryList = xFEDictionaryList; } /// /// XFE字典存储 /// /// /// public XFEMultiDictionary(params string[] headerAndContentStrings) { if (!(headerAndContentStrings.Length % 2 == 0)) throw new XFEDictionaryException("输入的字符串数组格式不正确,应为Header,Content,Header,Content..."); for (int i = 0; i < headerAndContentStrings.Length; i += 2) { xFEMultiDictionaryList.Add(new XFEEntry(headerAndContentStrings[i], headerAndContentStrings[i + 1])); } } /// /// XFE字典存储 /// /// 字典字符串 public XFEMultiDictionary(string dictionaryString) { xFEMultiDictionaryList = ToList(dictionaryString); } /// /// XFE字典存储 /// public XFEMultiDictionary() { } /// /// 从字符串加载字典 /// /// public static implicit operator XFEMultiDictionary(string dictionaryString) => new(dictionaryString); /// /// 将字典转为字符串 /// /// public static implicit operator string(XFEMultiDictionary xFEEntries) => new(xFEEntries.ToString()); }