当我使用List.Contains(T item)
.
问题是我BaseItem
用作列表项。我需要验证列表中的一个对象是否具有与我计划添加的对象相同的属性值。
例如:
public abstract class BaseItem
{
// some properties
public override bool Equals(object obj)
{
return obj != null && this.GetType() == obj.GetType();
}
}
public class ItemA : BaseItem
{
public int PropertyA { get; set; }
public override bool Equals(object obj)
{
if (base.Equals(obj) == false)
return false;
return (this.PropertyA == (obj as ItemA).PropertyA;
}
}
public class ItemB : BaseItem
{
public int PropertyB { get; set; }
public override bool Equals(object obj)
{
if (base.Equals(obj) == false)
return false;
return this.PropertyB == (obj as ItemB).PropertyB;
}
}
public class Program
{
static void Main(string[] args)
{
List<BaseItem> items = new List<BaseItem>()
{
new ItemB() { PropertyB = 3 },
new ItemA() { PropertyA = 2 },
new ItemB() { PropertyB = 2 }
};
BaseItem newItem = new ItemA() { PropertyA = 2 };
items.Contains(newItem); // should return 'True', because the first element is equals than 'newItem'
}
}
我不确定重写Equals
方法是否正确,或者我是否必须实现 IEquality 接口。