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
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 });
}
}