我想创建一个包含两个 int 值的列表,假设为 arrfirst
,另一个列表包含 arrfirst
的列表,假设为 arrsecond
然后检查 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
block 。例如,第一个循环显示 temp[0]=36
并且 temp[1]=42
进入 if block 并在第二个循环再次 temp[0]= 36
和 temp[1]=42
还有 Eklenenler[0][0]=36
和 Eklenenler[0][1]=42
所以它包含 temp 但它仍然进入。我如何解决这个问题以及为什么它返回 false 并且在 Eklenenler
中找不到这个 temp
。谢谢。
最佳答案
你可以用 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;
关于c# - 如何检查列表列表是否包含另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143068/