gpt4 book ai didi

c# - List.AddRange 调用 List.Add 吗?

转载 作者:太空狗 更新时间:2023-10-29 22:12:20 26 4
gpt4 key购买 nike

我有一个派生自 List 的自定义类,它有一个仅在满足特定条件时才添加的 Add 方法。

我是否还需要覆盖* AddRange,或者 AddRange 只是对给定范围的每个元素调用 Add?

*:是的,new 在 C# 上下文中隐藏而不是覆盖。

最佳答案

如果你想创建自定义集合。不要从 List<T> 派生它但来自 Collection<T> 或者直接执行IList<T>ICollection<T> .事实上,Add List<T> 中的方法类不是虚拟的。

备注:List<T>.AddRange使用 Array.Copy .

更新

当继承 Collection 时,你只需要覆盖 2 个方法!

public class MyCollection : Collection<string>
{
private bool IsValidItem(string item)
{
return; // Your condition : true if valid; false, otherwise.
}

// This method will be called when you call MyCollection.Add or MyCollection.Insert
protected override void InsertItem(int index, string item)
{
if(IsValidItem(item))
base.InsertItem(index, item);
}

// This method will be called when you call MyCollection[index] = newItem
protected override void SetItem(int index, string item)
{
if(IsValidItem(item))
base.SetItem(index, item);
}
}

如果您要验证的项目不是 string替换 string在上面的代码中输入正确的类型。

关于c# - List.AddRange 调用 List.Add 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com