You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中正确继承SortedList类的方法及相关疑问

嘿,我来帮你把这个SortedList继承的问题掰扯清楚~

先纠正一个核心误区

你一开始写的:

public class Plates : SortedList<string,Plate> { }

其实是完全合法且正确的!你后面加的那个内部plateList实例完全是多余的——因为继承本身已经让Plates类拥有了SortedList<string,Plate>的所有成员(索引、Add/Remove方法、排序逻辑等等),不需要再额外存一个集合对象。

如何给Plates添加自定义索引

如果你想扩展索引方式(比如除了用string键,还想用Plate的某个属性来查找),可以重载索引器:

public class Plate
{
    // 假设Plate类有这些属性
    public string Name { get; set; }
    public int Id { get; set; }
    public string Material { get; set; }
}

public class Plates : SortedList<string, Plate>
{
    // 自定义索引器:按Plate的Id查找
    public Plate this[int plateId]
    {
        get
        {
            // 从集合的Values里筛选对应Id的Plate
            return Values.FirstOrDefault(p => p.Id == plateId);
        }
    }

    // 基类已经提供了string键的索引,不用重复写,直接用就行:
    // Plate myPlate = plates["PlateName"];
}
如何添加自定义方法

你可以给Plates类添加任何你需要的业务方法,比如批量添加、筛选特定类型的Plate:

public class Plates : SortedList<string, Plate>
{
    // 批量添加Plate,自动用Plate的Name作为键
    public void AddRange(IEnumerable<Plate> platesToAdd)
    {
        foreach (var plate in platesToAdd)
        {
            if (ContainsKey(plate.Name))
            {
                throw new ArgumentException($"Plate named {plate.Name} already exists!");
            }
            Add(plate.Name, plate);
        }
    }

    // 筛选出所有陶瓷材质的Plate
    public IEnumerable<Plate> GetCeramicPlates()
    {
        return Values.Where(p => p.Material.Equals("Ceramic", StringComparison.OrdinalIgnoreCase));
    }
}
关于你提到的Enumerable继承困惑

你说继承Enumerable时需要添加额外枚举方法,其实这里有个概念混淆:Enumerable是静态类,我们一般是通过扩展方法来扩展它的功能,而不是继承它。而SortedList<TKey,TValue>本身已经实现了IEnumerable<T>接口,所以你的Plates类自动继承了这个接口的实现,直接就能用foreach遍历,不需要额外写枚举逻辑。

最后再总结下正确姿势
  1. 直接继承SortedList<string,Plate>就足够,不需要内部再实例一个集合
  2. 按需添加自定义索引器、方法来扩展基类没有的功能
  3. 如果只是需要默认的SortedList功能,空的继承类完全能用

内容的提问来源于stack exchange,提问作者PetrasVestartasEPFL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:23:13