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

ObservableList类Remove方法参数修正及索引器正确性排查

问题解答

一、正确设置Remove方法的输入参数

你的泛型类ObservableList<T>目标是删除列表中单个T类型对象(比如Customer),但当前Remove方法参数定义为ObservableList<Customer>,和测试代码中list.Remove(list[2])(传入单个T实例)的调用逻辑完全不匹配。

正确的参数定义应该是接收泛型类型T的实例,结合内部List<T>的Remove方法实现删除逻辑:

public class ObservableList<T>
{
    List<T> CustomerList = new List<T>();
    // 修正后的Remove方法
    public void Remove(T item)
    {
        CustomerList.Remove(item);
        // 可在此添加Observable模式的集合变更通知逻辑
    }
}

修改后,测试代码里的list.Remove(list[2])就能正常执行——因为list[2]返回的是Customer类型(即T的实际类型),和方法参数完全匹配。

二、当前索引器的实现问题

你写的索引器存在逻辑错误:

  • get访问器逻辑正确,能够根据索引返回对应位置的元素;
  • set访问器逻辑不符合常规索引器语义:索引器的set应该是替换指定索引位置的元素,而非调用Add方法追加新元素。

正确的索引器实现如下:

public T this[int indexer]
{
    get 
    {
        // 可选:添加索引越界检查,避免抛出异常
        if (indexer < 0 || indexer >= CustomerList.Count)
            throw new ArgumentOutOfRangeException(nameof(indexer));
        return CustomerList[indexer]; 
    }
    set 
    {
        // 替换指定索引位置的元素
        if (indexer < 0 || indexer >= CustomerList.Count)
            throw new ArgumentOutOfRangeException(nameof(indexer));
        CustomerList[indexer] = value;
        // 可在此添加Observable模式的集合变更通知逻辑
    }
}

如果你的需求是通过索引器添加元素,这种设计不符合行业惯例,建议单独实现Add方法来完成元素追加操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:10:26