C# 使用不同的对象在两个列表中迭代

C# 使用不同的对象在两个列表中迭代,c#,C#,我试图用不同的对象在两个列表中进行迭代。当我比较listTest1和listTest2时,如果记录满足以下条件,我会将它们添加到第三个列表中 如果abbrv和date是相同的,我将把对象从listTest2添加到listTest3 如果abbrv相同,但日期不同,我将对象从listTest2添加到listTest3,并将完成的属性切换到true。此外,我正在将记录从listTest1添加到listTest3 如果listTest2中不存在listTest1中的abbrv,我将把listTest

我试图用不同的对象在两个列表中进行迭代。当我比较
listTest1
listTest2
时,如果记录满足以下条件,我会将它们添加到第三个列表中

  • 如果
    abbrv
    date
    是相同的,我将把对象从
    listTest2
    添加到
    listTest3
  • 如果
    abbrv
    相同,但
    日期
    不同,我将对象从
    listTest2
    添加到
    listTest3
    ,并将完成的属性切换到
    true
    。此外,我正在将记录从
    listTest1
    添加到
    listTest3
  • 如果
    listTest2
    中不存在
    listTest1
    中的
    abbrv
    ,我将把
    listTest1
    中的记录添加到
    listTest3
我知道这听起来很混乱,这就是为什么我会告诉你我得到了什么,我期待着什么

我得到:

我需要得到所有这些记录,除了副本(Test2)

static void Main(字符串[]args)
{
Test1 Test1=newtest1(){abbrv=“Test1”,date=newdatetime(2017,11,12),completed=false};
Test1 test2=newtest1(){abbrv=“test2”,date=newdatetime(2017,12,17),completed=false};
Test1 test5=newtest1(){abbrv=“test5”,date=newdatetime(2017,12,12),completed=false};
Test2 test3=newtest2(){abbrv=“Test1”,date=newdatetime(2017,11,12),completed=false,abbrevName=“AbbrvName1”};
Test2 test4=newtest2(){abbrv=“Test2”,date=newdatetime(2017,12,12),completed=false,abbrevName=“AbbrvName2”};
List listTest1=新列表();
List listTest2=新列表();
List listTest3=新列表();
listTest1.Add(test1);
列表test1.Add(test2);
列表test1.Add(test5);
列表test2.Add(test3);
列表test2.Add(test4);
for(int i=0;ix.abbrv==listTest1[i].abbrv))
{
listTest3.Add(listTest2[a]);
}
}
其他的
{
if(listTest1[i].abbrv==listTest2[a].abbrv)
{
如果(!listTest3.Any(x=>x.abbrv==listTest1[i].abbrv&&x.date!=listTest1[i].date))
{
添加(new Test.Test2(){abbrv=listTest2[a].abbrv,date=listTest2[a].date,completed=true,abbrevName=listTest2[a].abbrevName});
添加(new Test.Test2(){abbrv=listTest1[i].abbrv,date=listTest1[i].date,completed=listTest1[i].completed,abbrevName=string.Empty});
}
}
else if(listTest1[i].abbrv!=listTest2[a].abbrv)
{
如果(!listTest3.Any(x=>x.abbrv==listTest1[i].abbrv))
{
添加(new Test.Test2(){abbrv=listTest1[i].abbrv,date=listTest1[i].date,completed=listTest1[i].completed,abbrevName=string.Empty});
}
}
}
}
}
}
公共类Test1
{
公共字符串abbrv{get;set;}
公共日期时间日期{get;set;}
公共bool已完成{get;set;}
}
公共类Test2
{
公共字符串abbrv{get;set;}
公共日期时间日期{get;set;}
公共bool已完成{get;set;}
公共字符串abbrevName{get;set;}
}  

您正确地实现了前两个条件,但第三个条件无法在最内部的循环中实现:在内部循环结束之前,您无法判断
listTest1
中的
abbrv
是否存在于
listTest2

添加一个
bool
变量
abbrvFound
,指示找到了
abbrv
。在进入嵌套循环之前,将其设置为
false
;如果找到匹配项,请将其设置为
true

循环结束后,检查
abbrvFound
以确定是否需要添加
listTest1
对象

for (int i = 0; i < listTest1.Count; i++) {
    bool abbrvFound = false;
    for (int a = 0; a < listTest2.Count; a++) {
        if (listTest1[i].abbrv != listTest2[a].abbrv)
            continue;
        abbrvFound = true;
        if (listTest1[i].date == listTest2[a].date) {
            listTest3.Add(listTest2[a]);
        } else {
            listTest3.Add(new Test.Test2() { abbrv = listTest2[a].abbrv, date = listTest2[a].date, completed = true, abbrevName = listTest2[a].abbrevName });
            listTest3.Add(new Test.Test2() { abbrv = listTest1[i].abbrv, date = listTest1[i].date, completed = listTest1[i].completed, abbrevName = string.Empty });
        }
    }
    if (!abbrvFound) {
        listTest3.Add(new Test.Test2() { abbrv = listTest1[i].abbrv, date = listTest1[i].date, completed = listTest1[i].completed, abbrevName = string.Empty });
    }
}
for(int i=0;i
谢谢。你能帮我修改代码吗?@LioProgramista你看到编辑中添加的代码了吗?
for (int i = 0; i < listTest1.Count; i++) {
    bool abbrvFound = false;
    for (int a = 0; a < listTest2.Count; a++) {
        if (listTest1[i].abbrv != listTest2[a].abbrv)
            continue;
        abbrvFound = true;
        if (listTest1[i].date == listTest2[a].date) {
            listTest3.Add(listTest2[a]);
        } else {
            listTest3.Add(new Test.Test2() { abbrv = listTest2[a].abbrv, date = listTest2[a].date, completed = true, abbrevName = listTest2[a].abbrevName });
            listTest3.Add(new Test.Test2() { abbrv = listTest1[i].abbrv, date = listTest1[i].date, completed = listTest1[i].completed, abbrevName = string.Empty });
        }
    }
    if (!abbrvFound) {
        listTest3.Add(new Test.Test2() { abbrv = listTest1[i].abbrv, date = listTest1[i].date, completed = listTest1[i].completed, abbrevName = string.Empty });
    }
}