使用KeyedList来勾选项目

本文关键字:选项 项目 KeyedList 使用 | 更新日期: 2023-09-27 18:29:56

我用C#编写了一个小类,用一个特殊的键来保存一个数据结构的列表,以对项进行分组。

public class KeyedList<TKey, TItem> : List<TItem>
{
    public TKey Key { protected set; get; }
    public IEnumerable<TItem> Items { protected set; get; }
    public KeyedList(TKey key, IEnumerable<TItem> items)
        : base(items)
    {
        Key = key;
        Items = items;
    }
    public KeyedList(IGrouping<TKey, TItem> grouping)
        :base (grouping)
    {
        Key = grouping.Key;
        ???
    }
}

现在我想访问元素。

那么我必须在???以获取Items的信息?

使用KeyedList来勾选项目

首先,您根本不应该存储Items,因为它们已经由基类List<TItem>处理了。

但如果您真的想这样做,您可以直接将grouping分配给Items,因为IGrouping<TKey, TItem>实现了IEnumerable<TItem>:

public KeyedList(IGrouping<TKey, TItem> grouping)
    :base (grouping)
{
    Key = grouping.Key;
    Items = grouping;
}

您还可以将Items属性指向KeyedList实例本身,因为它实现了List<TItem>:

public KeyedList(IGrouping<TKey, TItem> grouping)
    :base (grouping)
{
    Key = grouping.Key;
    Items = this;
}