下面是一些我正在努力工作的代碼。如果一組中的項目與另一組中的項目不匹配,則將比較的所有項目添加到列表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