此方法根本不起作用:
public static void Delete(ref Prot[] pack, Prot prot)
{
var temp = new List<Prot>(pack);
temp.Remove(prot);
pack = temp.ToArray();
}
我做错了什么?
谢谢。
答案 0 :(得分:4)
您的班级Prot
需要覆盖Object.Equals()
方法。这就是List<T>.Remove
的工作原理。来自文档:
如果类型
T
实现IEquatable<T>
通用接口,则相等比较器是该接口的Equals方法;否则,默认的相等比较器为Object.Equals
。
如果不覆盖Object.Equals
,它将只使用默认实现来检查引用相等性,而不是值相等。
因此,temp.Remove(prot);
永远不会删除任何值。 (这可以根据Remove
的返回值进行验证。如果成功删除了值,则返回true
,否则返回false
。
以下是一个基本示例:http://ideone.com/vOZoYI
初步答复(问题是有问题的拼写错误)。
您正在修改新对象List<Prot>
,而不是Prot[]
参数。如果您将pack
分配给List<Prot>.ToArray()
,那么它会将其从传入的数组中删除。
public static void Delete(ref Prot[] pack, Prot prot)
{
var temp = new List<Prot>(pack);
temp.Remove(prot);
pack = temp.ToArray();
}