我想创建一个列表,其中包含两个int值,让我们说arrfirst
,另一个列表将保存arrfirst
列表,让我们说arrsecond
然后检查是否{{} 1}}包含已定义的arrsecond
。现在我创建了列表但是当我尝试使用arrfirst
时它不起作用。
.Contains
这是我的代码。当我调试时,我可以看到List<List<int>> Eklenenler = new List<List<int>>();
for (int i = 0; i < YourTable.Rows.Count; i++)
{
prjAd = YourTable.Rows[i].Field<string>("F1");
if (prjAd != "Servis Adresi")
{
wesAd = YourTable.Rows[i].Field<string>("F2");
RowPrj = tbProjeler.AsEnumerable().Where(r => r.Field<string>("prjAd") == prjAd).FirstOrDefault();
RowWes = tbServisler.AsEnumerable().Where(k => k.Field<string>("wesAd") == wesAd).FirstOrDefault();
prjId = RowPrj.Field<int>("prjId");
wesId = RowWes.Field<int>("wesId");
List<int> temp = new List<int>();
temp.Add(prjId);
temp.Add(wesId);
if (!Eklenenler.Contains(temp))
{
sqlExProjeEkle = "INSERT INTO NLK_PRJ_Webservisler (prjId,wesId) Values (" + prjId + "," + wesId + ")";
dco.Execute(sqlExProjeEkle);
Eklenenler.Add(temp);
}
else
{
}
}
}
值是正确的,并且在第二次循环时,temp
位于temp
列表中,但它始终位于Eklenenler
块中。例如,第一个循环显示if
和temp[0]=36
进入阻塞,第二个循环再次temp[1]=42
和temp[0]=36
进入temp[1]=42
和Eklenenler[0][0]=36
所以它包含临时但它仍然存在。我如何解决这个问题以及为什么这会返回false而在Eklenenler[0][1]=42
中找不到这个temp
。谢谢。
答案 0 :(得分:1)
你可以用linq在一行中用这样的东西
来做if (!Eklenenler.Any(c => c.SequenceEqual(temp)))
{
sqlExProjeEkle = "INSERT INTO NLK_PRJ_Webservisler (prjId,wesId) Values (" + prjId + "," + wesId + ")";
dco.Execute(sqlExProjeEkle);
Eklenenler.Add(temp);
}
else
{
}
别忘了添加
using System.Linq;
答案 1 :(得分:0)
这是使用foreach循环的答案。
foreach (List<int> list in Eklenenler)
{
if (list.SequenceEqual(temp))
{
//Do work
}
}