运算符重载在C#代码中工作得很好,因为我正在尝试以下方式。
**
public class HostCode
{
public string Code { get; set; }
public string Name { get; set; }
public static bool operator ==(HostCode hc1, HostCode hc2)
{
return hc1.Code == hc2.Code;
}
public static bool operator !=(HostCode hc1, HostCode hc2)
{
return true;
}
}**
我有一个名为HostCode的clas,它包含2个重载方法(一个用于'==',另一个用于'!=') 我在下面创建了一系列主机代码。
**var hostCodes = new List<HostCode>()
{
new HostCode(){ Code = "1", Name = "sreekanth" },
new HostCode(){ Code = "2", Name = "sajan" },
new HostCode(){ Code = "3", Name = "mathew" },
new HostCode(){ Code = "4", Name = "sachin" }
};**
***var hc = new HostCode() { Code = "1", Name = "sreekanth" };***
***var isEq = hostCodes[1] == hc;***
当我在上面尝试时,在HostCode类中触发了相应的运算符方法(在这种情况下它是'==')。这样我就可以在那里编写自定义逻辑。
但如果Iam尝试使用Linq查询,则不会触发。但在这种情况下,我也比较了两个具有相同类型的对象。
**var isEqual = from obj in hostCodes where (HostCode)obj == (HostCode)hc select obj;**
任何人都可以帮我找一个可以通过Linq查询比较2个对象的方法吗?
答案 0 :(得分:1)
您可以使用IEqualityComparer或覆盖equals来实现此目的。
public class HostCode
{
....
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
return obj as HostCode == null ? false : (obj as HostCode).Code == Code;
}
}
IEqualityComparer的用法是当你在对象和某些函数(如Contain)上有一些相等性时......你想要使用某些特定的相等:
public class EqualityComparer : IEqualityComparer<HostCode >
{
public bool Equals(HostCode x, HostCode y)
{
return y.ID == x.ID;
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
答案 1 :(得分:0)
由于您的问题是“我应该如何比较它们才能实现这一目标”我会回答“您应该重载并使用.Equals()
代替==
”
您的重载定义!=
是什么?