下面是一些我正在努力工作的代码。如果一组中的项目与另一组中的项目不匹配,则将比较的所有项目添加到列表0中。如果最后列表中不包含除0以外的任何其他值,则意味着第二组中的项目根本不存在。出于某种原因,我在结果列表中不断收到错误的值,所以肯定有某个地方有bug,只是我似乎无法找到它。使用IComparable比较对象的问题
public class CompareItem : IComparable
{
public string CustId { get; set; }
public string TechId { get; set; }
public CompareItem(string custId, string techId)
{
CustId = custId;
TechId = techId;
}
public int CompareTo(object obj)
{
CompareItem Temp = (CompareItem)obj;
if (this.CustId != Temp.CustId || this.TechId != Temp.TechId)
{
return 0;
}
else
{
return 1;
}
}
}
static void Main(string[] args)
{
List<CompareItem> LeftCompareSet = new List<CompareItem>();
LeftCompareSet1.Add(new CompareItem("0000", "0001"));
LeftCompareSet1.Add(new CompareItem("0001", "0001"));
LeftCompareSet1.Add(new CompareItem("0002", "0002"));
LeftCompareSet1.Add(new CompareItem("0003", "0003"));
LeftCompareSet1.Add(new CompareItem("0002", "0004"));
List<CompareItem> RightCompareSet = new List<CompareItem>();
RightCompareSet1.Add(new CompareItem("0005", "0005"));
RightCompareSet1.Add(new CompareItem("0004", "0004"));
RightCompareSet1.Add(new CompareItem("0003", "0003"));
RightCompareSet1.Add(new CompareItem("0002", "0002"));
RightCompareSet1.Add(new CompareItem("0006", "0002"));
int state = 0;
List<int> tlc = new List<int>();
List<int> trc = new List<int>();
foreach (CompareItem lc in LeftCompareSet)
{
foreach (CompareItem rc in RightCompareSet)
{
state = lc.CompareTo(rc);
if (state == 0)
{
tlc.Add(0);
}
else
{
tlc.Add(1);
}
}
if (tlc.Contains(1))
{
Console.WriteLine("Cust: " + lc.CustId + ", Tech: " + lc.TechId + ", Not missing");
}
else
{
Console.WriteLine("Cust: " + lc.CustId + ", Tech: " + lc.TechId + ", Missing");
}
}
foreach (CompareItem rc in RightCompareSet)
{
foreach (CompareItem lc in LeftCompareSet)
{
state = rc.CompareTo(lc);
if (state == 0)
{
trc.Add(0);
}
else
{
trc.Add(1);
}
}
if (trc.Contains(1))
{
Console.WriteLine("Cust: " + rc.CustId + ", Tech: " + rc.TechId + ", Not missing");
}
else
{
Console.WriteLine("Cust: " + rc.CustId + ", Tech: " + rc.TechId + ", Missing");
}
}
}
感谢您的支持。因此,如果对象匹配,则将return 1更改为return 0,但如果对象不匹配,则必须返回一些内容,如果对象的属性较大或较小,我不感兴趣。对于不匹配的对象使用1似乎可行,但第二个列表中的最后一项除外,它表示它包含在第一个列表中,但情况并非如此。 – Willem 2012-04-25 12:13:04
你应该重写你的类的'Equals'和'GetHashCode',它更有意义。 – zmbq 2012-04-25 14:59:10