我有自定义对象实现IEquatable,以便我可以使用List.Contains(anotherCustomObject)。因此,如果它包含该对象,则将其从列表中删除。
问题是我实现的.Equals没有按预期工作,但是现在所有的都显示为不相等而且没有从List中删除。
为了澄清,在下面的图像中,currentSpecs是我要删除的列表,如果它包含来自tmpAS400Specs的任何列表。
以下是代码。
var tmpSpecs = new AS400SpecificationAttribute
{
ProductNumber = workTask.WIITEM,
AttributeGroup = attrGroup,
AttributeName = attrName,
AttributeValue = attrValue
};
if (currentSpecs.Contains(tmpSpecs))
{
currentSpecs.Remove(tmpSpecs);
}
比较代码
public class AS400SpecificationAttribute : IEquatable<AS400SpecificationAttribute>
{
private string name;
private string value;
private string group;
private string productNumber;
public string ProductNumber
{
get { return productNumber; }
set
{
if (!String.IsNullOrEmpty(value) && !String.IsNullOrWhiteSpace(value))
productNumber = value.Trim().ToUpper();
}
}
public string AttributeName
{
get
{
return this.name;
}
set
{
if (!String.IsNullOrEmpty(value) && !String.IsNullOrWhiteSpace(value))
this.name = value.Trim();
}
}
public string AttributeValue
{
get
{
return this.value;
}
set
{
if (!String.IsNullOrEmpty(value) && !String.IsNullOrWhiteSpace(value))
this.value = value.Trim().Replace("\\\"","\"");
}
}
public string AttributeGroup
{
get
{
return this.group;
}
set
{
if (!String.IsNullOrEmpty(value) && !String.IsNullOrWhiteSpace(value))
this.group = value.Trim();
}
}
public bool Equals(AS400SpecificationAttribute other)
{
if (other == null)
return false;
return this.ProductNumber.Equals(other.productNumber)
&& ((this.group != null && this.group.Equals(other.AttributeGroup))
|| (this.group == null && other.AttributeGroup == null))
&& ((this.name!= null && this.name.Equals(other.AttributeName))
|| (this.name == null && other.AttributeName == null))
&& ((this.value != null && this.value.Equals(other.AttributeValue))
|| (this.value == null && other.AttributeName == null));
}
}
为什么比较无法检测到两个属性是否相同?
答案 0 :(得分:1)
我注意到了这一点:
Object A.value = 'x', Object B.value = 'X'.
尝试使其不区分大小写,或确保您的对象真正相等。
答案 1 :(得分:0)
public override bool Equals(object obj)
{
var other = obj as AS400SpecificationAttribute;
if (other == null)
......等等。