XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System;
using System.Collections.Generic;
using System.Linq;

namespace XFEExtension.FormatExtension
{
    /// <summary>
    /// XFE条目
    /// </summary>
    public class XFEEntry
    {
        /// <summary>
        /// 头
        /// </summary>
        public string Header { get; set; }
        /// <summary>
        /// 内容
        /// </summary>
        public string Content { get; set; }
        /// <summary>
        /// 转换为字符串
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return $"|{{+-[+-{Header.Replace("[+", "[++").Replace("+]", "++]").Replace("|{+", "|{++").Replace("+}|", "++}|")}-+][+-{Content.Replace("[+", "[++").Replace("+]", "++]").Replace("|{+", "|{++").Replace("+}|", "++}|")}-+]-+}}|";
        }
        /// <summary>
        /// 将字符串转化为条目对象
        /// </summary>
        /// <param name="EntryString"></param>
        /// <returns></returns>
        public static XFEEntry ToEntry(string EntryString)
        {
            string[] messages = EntryString.Split(new string[] { "|{+-", "-+}|" }, StringSplitOptions.None);
            foreach (string message in messages)
            {
                string[] xFEDictionaryString = message.Split(new string[] { "[+-", "-+]" }, StringSplitOptions.None);
                if (xFEDictionaryString.Length == 5)
                {
                    return new XFEEntry(xFEDictionaryString[1].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|"), xFEDictionaryString[3].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|"));
                }
            }
            return null;
        }
        /// <summary>
        /// XFE条目
        /// </summary>
        /// <param name="Header">头</param>
        /// <param name="Content">内容</param>
        public XFEEntry(string Header, string Content)
        {
            this.Header = Header;
            this.Content = Content;
        }
    }
    /// <summary>
    /// XFE唯一字典存储
    /// </summary>
    public class XFEDictionary : ICollection<XFEEntry>
    {
        private List<XFEEntry> xFEDictionaryList = new List<XFEEntry>();
        /// <summary>
        /// 字典中的条目数
        /// </summary>
        public int Count => xFEDictionaryList.Count;
        /// <summary>
        /// 只读
        /// </summary>
        public bool IsReadOnly => false;
        /// <summary>
        /// 从字符串中加载字典
        /// </summary>
        /// <param name="DictionaryString"></param>
        public void Load(string DictionaryString)
        {
            xFEDictionaryList = ToList(DictionaryString);
        }
        /// <summary>
        /// 追加条目
        /// </summary>
        /// <param name="entry">条目对象</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void Add(XFEEntry entry)
        {
            if (Contains(entry.Header))
                throw new XFEDictionaryException("Header的值应唯一!");
            xFEDictionaryList.Add(entry);
        }
        /// <summary>
        /// 追加条目
        /// </summary>
        /// <param name="EntryString">条目字符串</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void Add(string EntryString)
        {
            var entry = XFEEntry.ToEntry(EntryString);
            if (Contains(entry.Header))
                throw new XFEDictionaryException("Header的值应唯一!");
            xFEDictionaryList.Add(entry);
        }
        /// <summary>
        /// 追加条目
        /// </summary>
        /// <param name="Header">头</param>
        /// <param name="Content">内容</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void Add(string Header, string Content)
        {
            if (Contains(Header))
                throw new XFEDictionaryException("Header的值应唯一!");
            xFEDictionaryList.Add(new XFEEntry(Header, Content));
        }
        /// <summary>
        /// 追加字典
        /// </summary>
        /// <param name="collection">字典对象</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void AddRange(List<XFEEntry> collection)
        {
            var duplicates = collection.GroupBy(entry => entry.Header)
                                    .Where(group => group.Count() > 1)
                                    .Select(group => group.Key);
            if (duplicates.Any())
                throw new XFEDictionaryException("Header的值应唯一");
            xFEDictionaryList.AddRange(collection);
        }
        /// <summary>
        /// 追加字典
        /// </summary>
        /// <param name="DictionaryString">字典字符串</param>
        public void AddRange(string DictionaryString)
        {
            xFEDictionaryList.AddRange(ToList(DictionaryString));
        }
        /// <summary>
        /// 插入条目
        /// </summary>
        /// <param name="index">插入位置</param>
        /// <param name="entry">条目</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void Insert(int index, XFEEntry entry)
        {
            if (Contains(entry.Header))
                throw new XFEDictionaryException("Header的值应唯一!");
            xFEDictionaryList.Insert(index, entry);
        }
        /// <summary>
        /// 插入条目
        /// </summary>
        /// <param name="index">插入位置</param>
        /// <param name="EntryString">条目</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void Insert(int index, string EntryString)
        {
            var entry = XFEEntry.ToEntry(EntryString);
            if (Contains(entry.Header))
                throw new XFEDictionaryException("Header的值应唯一!");
            xFEDictionaryList.Insert(index, entry);
        }
        /// <summary>
        /// 插入条目
        /// </summary>
        /// <param name="index">插入位置</param>
        /// <param name="Header">头</param>
        /// <param name="Content">内容</param>
        /// <exception cref="XFEDictionaryException"></exception>
        public void Insert(int index, string Header, string Content)
        {
            if (Contains(Header))
                throw new XFEDictionaryException("Header的值应唯一!");
            xFEDictionaryList.Insert(index, new XFEEntry(Header, Content));
        }
        /// <summary>
        /// 清空字典
        /// </summary>
        public void Clear()
        {
            xFEDictionaryList.Clear();
        }
        /// <summary>
        /// 检测是否包含
        /// </summary>
        /// <param name="item">条目对象</param>
        /// <returns></returns>
        public bool Contains(XFEEntry item)
        {
            return xFEDictionaryList.Contains(item);
        }
        /// <summary>
        /// 检测是否包含头
        /// </summary>
        /// <param name="HeaderString">指定头</param>
        /// <returns></returns>
        public bool Contains(string HeaderString)
        {
            return xFEDictionaryList.Find(x => x.Header == HeaderString) != null;
        }
        /// <summary>
        /// 检测是否包含内容
        /// </summary>
        /// <param name="ContentString">指定内容</param>
        /// <returns></returns>
        public bool ContainContent(string ContentString)
        {
            return xFEDictionaryList.Find(x => x.Content == ContentString) != null;
        }
        /// <summary>
        /// 复制
        /// </summary>
        /// <param name="array">条目数组</param>
        /// <param name="arrayIndex">索引</param>
        public void CopyTo(XFEEntry[] array, int arrayIndex)
        {
            xFEDictionaryList.CopyTo(array, arrayIndex);
        }
        /// <summary>
        /// 获取索引器
        /// </summary>
        /// <returns></returns>
        public IEnumerator<XFEEntry> GetEnumerator()
        {
            return xFEDictionaryList.GetEnumerator();
        }
        /// <summary>
        /// 移除指定的条目
        /// </summary>
        /// <param name="item">条目对象</param>
        /// <returns></returns>
        public bool Remove(XFEEntry item)
        {
            return xFEDictionaryList.Remove(item);
        }
        /// <summary>
        /// 移除指定的条目
        /// </summary>
        /// <param name="HeaderString">头</param>
        /// <returns></returns>
        public bool Remove(string HeaderString)
        {
            return xFEDictionaryList.Remove(xFEDictionaryList.Find(x => x.Header == HeaderString));
        }
        /// <summary>
        /// 移除指定范围的数组
        /// </summary>
        /// <param name="startIndex">起始位置</param>
        /// <param name="count">移除长度</param>
        public void RemoveRange(int startIndex, int count)
        {
            xFEDictionaryList.RemoveRange(startIndex, count);
        }
        /// <summary>
        /// 索引器
        /// </summary>
        /// <param name="HeaderString">头</param>
        /// <returns></returns>
        public string this[string HeaderString]
        {
            get
            {
                return xFEDictionaryList.Find(x => x.Header == HeaderString)?.Content;
            }
            set
            {
                xFEDictionaryList.Find(x => x.Header == HeaderString).Content = value;
            }
        }
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return xFEDictionaryList.GetEnumerator();
        }
        /// <summary>
        /// 转换为字符串
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            string result = "";
            foreach (var item in xFEDictionaryList)
            {
                result += item.ToString();
            }
            return result;
        }
        /// <summary>
        /// 将字符串转换为XFEEntry的List
        /// </summary>
        /// <param name="DictionaryString">字符串</param>
        /// <returns></returns>
        /// <exception cref="XFEDictionaryException"></exception>
        protected static List<XFEEntry> ToList(string DictionaryString)
        {
            List<XFEEntry> xFEList = new List<XFEEntry>();
            string[] messages = DictionaryString.Split(new string[] { "|{+-", "-+}|" }, StringSplitOptions.None);
            foreach (string message in messages)
            {
                string[] xFEDictionaryString = message.Split(new string[] { "[+-", "-+]" }, StringSplitOptions.None);
                if (xFEDictionaryString.Length == 5)
                {
                    xFEList.Add(new XFEEntry(xFEDictionaryString[1].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|"), xFEDictionaryString[3].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|")));
                }
            }
            var duplicates = xFEList.GroupBy(entry => entry.Header)
                                    .Where(group => group.Count() > 1)
                                    .Select(group => group.Key);
            if (duplicates.Any())
                throw new XFEDictionaryException("Header的值应唯一");
            return xFEList;
        }
        /// <summary>
        /// 将字符串转换为XFEDictionary
        /// </summary>
        /// <param name="DictionaryString">字符串</param>
        /// <returns></returns>
        /// <exception cref="XFEDictionaryException"></exception>
        public static XFEDictionary ToDictionary(string DictionaryString)
        {
            return new XFEDictionary(ToList(DictionaryString));
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        /// <param name="xFEDictionaryList">条目列表</param>
        public XFEDictionary(List<XFEEntry> xFEDictionaryList)
        {
            this.xFEDictionaryList = xFEDictionaryList;
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        /// <param name="HeaderAndContentStrings"></param>
        /// <exception cref="XFEDictionaryException"></exception>
        public XFEDictionary(params string[] HeaderAndContentStrings)
        {
            if (!(HeaderAndContentStrings.Length % 2 == 0))
                throw new XFEDictionaryException("输入的字符串数组格式不正确,应为Header,Content,Header,Content...");
            for (int i = 0; i < HeaderAndContentStrings.Length; i += 2)
            {
                xFEDictionaryList.Add(new XFEEntry(HeaderAndContentStrings[i], HeaderAndContentStrings[i + 1]));
            }
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        /// <param name="DictionaryString">字典字符串</param>
        public XFEDictionary(string DictionaryString)
        {
            xFEDictionaryList = ToList(DictionaryString);
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        public XFEDictionary() { }
    }
    /// <summary>
    /// XFE可重复字典存储
    /// </summary>
    public class XFEMultiDictionary : ICollection<XFEEntry>
    {
        private List<XFEEntry> xFEMultiDictionaryList = new List<XFEEntry>();
        /// <summary>
        /// 字典中的条目数
        /// </summary>
        public int Count => xFEMultiDictionaryList.Count;
        /// <summary>
        /// 只读
        /// </summary>
        public bool IsReadOnly => false;
        /// <summary>
        /// 从字符串中加载字典
        /// </summary>
        /// <param name="DictionaryString"></param>
        public void Load(string DictionaryString)
        {
            xFEMultiDictionaryList = ToList(DictionaryString);
        }
        /// <summary>
        /// 追加条目
        /// </summary>
        /// <param name="entry">条目对象</param>
        public void Add(XFEEntry entry)
        {
            xFEMultiDictionaryList.Add(entry);
        }
        /// <summary>
        /// 追加条目
        /// </summary>
        /// <param name="EntryString">条目字符串</param>
        public void Add(string EntryString)
        {
            xFEMultiDictionaryList.Add(XFEEntry.ToEntry(EntryString));
        }
        /// <summary>
        /// 追加条目
        /// </summary>
        /// <param name="Header">头</param>
        /// <param name="Content">内容</param>
        public void Add(string Header, string Content)
        {
            xFEMultiDictionaryList.Add(new XFEEntry(Header, Content));
        }
        /// <summary>
        /// 追加字典
        /// </summary>
        /// <param name="collection">字典对象</param>
        public void AddRange(List<XFEEntry> collection)
        {
            xFEMultiDictionaryList.AddRange(collection);
        }
        /// <summary>
        /// 追加字典
        /// </summary>
        /// <param name="DictionaryString">字典字符串</param>
        public void AddRange(string DictionaryString)
        {
            xFEMultiDictionaryList.AddRange(ToList(DictionaryString));
        }
        /// <summary>
        /// 插入条目
        /// </summary>
        /// <param name="index">插入位置</param>
        /// <param name="entry">条目</param>
        public void Insert(int index, XFEEntry entry)
        {
            xFEMultiDictionaryList.Insert(index, entry);
        }
        /// <summary>
        /// 插入条目
        /// </summary>
        /// <param name="index">插入位置</param>
        /// <param name="EntryString">条目</param>
        public void Insert(int index, string EntryString)
        {
            xFEMultiDictionaryList.Insert(index, XFEEntry.ToEntry(EntryString));
        }
        /// <summary>
        /// 插入条目
        /// </summary>
        /// <param name="index">插入位置</param>
        /// <param name="Header">头</param>
        /// <param name="Content">内容</param>
        public void Insert(int index, string Header, string Content)
        {
            xFEMultiDictionaryList.Insert(index, new XFEEntry(Header, Content));
        }
        /// <summary>
        /// 清空字典
        /// </summary>
        public void Clear()
        {
            xFEMultiDictionaryList.Clear();
        }
        /// <summary>
        /// 检测是否包含
        /// </summary>
        /// <param name="item">条目对象</param>
        /// <returns></returns>
        public bool Contains(XFEEntry item)
        {
            return xFEMultiDictionaryList.Contains(item);
        }
        /// <summary>
        /// 检测是否包含头
        /// </summary>
        /// <param name="HeaderString">指定头</param>
        /// <returns></returns>
        public bool Contains(string HeaderString)
        {
            return xFEMultiDictionaryList.Find(x => x.Header == HeaderString) != null;
        }
        /// <summary>
        /// 检测是否包含内容
        /// </summary>
        /// <param name="ContentString">指定内容</param>
        /// <returns></returns>
        public bool ContainContent(string ContentString)
        {
            return xFEMultiDictionaryList.Find(x => x.Content == ContentString) != null;
        }
        /// <summary>
        /// 复制
        /// </summary>
        /// <param name="array">条目数组</param>
        /// <param name="arrayIndex">索引</param>
        public void CopyTo(XFEEntry[] array, int arrayIndex)
        {
            xFEMultiDictionaryList.CopyTo(array, arrayIndex);
        }
        /// <summary>
        /// 获取内容
        /// </summary>
        /// <param name="header">头</param>
        /// <returns></returns>
        public List<string> GetContents(string header)
        {
            var list = new List<string>();
            xFEMultiDictionaryList.FindAll(x => x.Header == header)?.ForEach(y => list.Add(y.Content));
            return list;
        }
        /// <summary>
        /// 获取索引器
        /// </summary>
        /// <returns></returns>
        public IEnumerator<XFEEntry> GetEnumerator()
        {
            return xFEMultiDictionaryList.GetEnumerator();
        }
        /// <summary>
        /// 移除指定的条目
        /// </summary>
        /// <param name="item">条目对象</param>
        /// <returns></returns>
        public bool Remove(XFEEntry item)
        {
            return xFEMultiDictionaryList.Remove(item);
        }
        /// <summary>
        /// 移除指定的条目
        /// </summary>
        /// <param name="HeaderString">头</param>
        /// <returns></returns>
        public bool Remove(string HeaderString)
        {
            return xFEMultiDictionaryList.Remove(xFEMultiDictionaryList.Find(x => x.Header == HeaderString));
        }
        /// <summary>
        /// 移除指定范围的数组
        /// </summary>
        /// <param name="startIndex">起始位置</param>
        /// <param name="count">移除长度</param>
        public void RemoveRange(int startIndex, int count)
        {
            xFEMultiDictionaryList.RemoveRange(startIndex, count);
        }
        /// <summary>
        /// 索引器
        /// </summary>
        /// <param name="HeaderString">头</param>
        /// <returns></returns>
        public string this[string HeaderString]
        {
            get
            {
                return xFEMultiDictionaryList.Find(x => x.Header == HeaderString)?.Content;
            }
            set
            {
                xFEMultiDictionaryList.Find(x => x.Header == HeaderString).Content = value;
            }
        }
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return xFEMultiDictionaryList.GetEnumerator();
        }
        /// <summary>
        /// 转换为字符串
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            string result = "";
            foreach (var entry in xFEMultiDictionaryList)
            {
                result += entry.ToString();
            }
            return result;
        }
        /// <summary>
        /// 将字符串转换为XFEEntry的List
        /// </summary>
        /// <param name="DictionaryString">字符串</param>
        /// <returns></returns>
        protected static List<XFEEntry> ToList(string DictionaryString)
        {
            List<XFEEntry> xFEList = new List<XFEEntry>();
            string[] messages = DictionaryString.Split(new string[] { "|{+-", "-+}|" }, StringSplitOptions.None);
            foreach (string message in messages)
            {
                string[] xFEDictionaryString = message.Split(new string[] { "[+-", "-+]" }, StringSplitOptions.None);
                if (xFEDictionaryString.Length == 5)
                {
                    xFEList.Add(new XFEEntry(xFEDictionaryString[1].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|"), xFEDictionaryString[3].Replace("[++", "[+").Replace("++]", "+]").Replace("|{++", "|{+").Replace("++}|", "+}|")));
                }
            }
            return xFEList;
        }
        /// <summary>
        /// 将字符串转换为XFEMultiDictionary
        /// </summary>
        /// <param name="DictionaryString">字符串</param>
        /// <returns></returns>
        public static XFEMultiDictionary ToMultiDictionary(string DictionaryString)
        {
            return new XFEMultiDictionary(ToList(DictionaryString));
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        /// <param name="xFEDictionaryList">条目列表</param>
        public XFEMultiDictionary(List<XFEEntry> xFEDictionaryList)
        {
            this.xFEMultiDictionaryList = xFEDictionaryList;
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        /// <param name="HeaderAndContentStrings"></param>
        /// <exception cref="XFEDictionaryException"></exception>
        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]));
            }
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        /// <param name="DictionaryString">字典字符串</param>
        public XFEMultiDictionary(string DictionaryString)
        {
            xFEMultiDictionaryList = ToList(DictionaryString);
        }
        /// <summary>
        /// XFE字典存储
        /// </summary>
        public XFEMultiDictionary() { }
    }
}