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
相关产品推荐
相关产品推荐

