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.Collections;

namespace XFEExtension.NetCore.XFETransform.ObjectInfoAnalyzer;

internal abstract class SubObjectsBase : ISubObjects
{

    protected readonly List<IObjectInfo> ObjectInfoList;

    protected SubObjectsBase(List<IObjectInfo>? objectInfoList, IObjectInfo parent)
    {
        this.ObjectInfoList = objectInfoList ?? [];
        Parent = parent;
        objectInfoList?.ForEach(objectInfo => objectInfo.Parent = parent);
    }

    /// <summary>
    /// 获取或设置指定索引处的子对象信息。
    /// </summary>
    /// <param name="index">要访问的子对象索引。</param>
    /// <returns>指定索引处的子对象信息。</returns>
    public IObjectInfo this[int index] { get => ObjectInfoList[index]; set => ObjectInfoList[index] = value; }

    /// <summary>
    /// 获取当前集合包含的子对象数量。
    /// </summary>
    public int Count => ObjectInfoList.Count;

    /// <summary>
    /// 获取一个值,指示当前子对象集合是否为只读;该实现始终返回 <see langword="false"/>。
    /// </summary>
    public bool IsReadOnly => false;

    /// <summary>
    /// 获取拥有当前子对象集合的父对象信息。
    /// </summary>
    public IObjectInfo Parent { get; init; }

    /// <summary>
    /// 将对象信息添加到子对象集合末尾。
    /// </summary>
    /// <param name="item">要添加的对象信息。</param>
    public void Add(IObjectInfo item) => ObjectInfoList.Add(item);

    /// <summary>
    /// 从当前集合中移除全部子对象信息。
    /// </summary>
    public void Clear() => ObjectInfoList.Clear();

    /// <summary>
    /// 确定当前集合是否包含指定的对象信息。
    /// </summary>
    /// <param name="item">要在集合中查找的对象信息。</param>
    /// <returns>集合包含指定对象信息时为 <see langword="true"/>;否则为 <see langword="false"/>。</returns>
    public bool Contains(IObjectInfo item) => ObjectInfoList.Contains(item);

    /// <summary>
    /// 从指定数组索引开始,将当前集合中的全部子对象复制到目标数组。
    /// </summary>
    /// <param name="array">接收子对象信息的目标数组。</param>
    /// <param name="arrayIndex">目标数组中开始写入的从零开始的索引。</param>
    public void CopyTo(IObjectInfo[] array, int arrayIndex) => ObjectInfoList.CopyTo(array, arrayIndex);

    /// <summary>
    /// 获取用于遍历当前子对象集合的泛型枚举器。
    /// </summary>
    /// <returns>当前子对象集合的泛型枚举器。</returns>
    public IEnumerator<IObjectInfo> GetEnumerator() => ObjectInfoList.GetEnumerator();

    /// <summary>
    /// 查找指定对象信息并返回其从零开始的索引。
    /// </summary>
    /// <param name="item">要在集合中查找的对象信息。</param>
    /// <returns>找到指定对象信息时返回其索引;否则返回 -1。</returns>
    public int IndexOf(IObjectInfo item) => ObjectInfoList.IndexOf(item);

    /// <summary>
    /// 将对象信息插入当前集合的指定索引处。
    /// </summary>
    /// <param name="index">插入对象信息的从零开始的索引。</param>
    /// <param name="item">要插入的对象信息。</param>
    public void Insert(int index, IObjectInfo item) => ObjectInfoList.Insert(index, item);

    /// <summary>
    /// 从当前集合中移除首次出现的指定对象信息。
    /// </summary>
    /// <param name="item">要移除的对象信息。</param>
    /// <returns>成功移除对象信息时为 <see langword="true"/>;否则为 <see langword="false"/>。</returns>
    public bool Remove(IObjectInfo item) => ObjectInfoList.Remove(item);

    /// <summary>
    /// 移除当前集合中指定索引处的子对象信息。
    /// </summary>
    /// <param name="index">要移除的子对象索引。</param>
    public void RemoveAt(int index) => ObjectInfoList.RemoveAt(index);

    IEnumerator IEnumerable.GetEnumerator() => ObjectInfoList.GetEnumerator();
}