我想创建一个包含两个 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
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码。当我调试时,我可以看到temp值是正确的,并且在第二个循环中temp也在Eklenenler列表中,但它总是在if块中。例如,第一个循环显示temp[0]=36并temp[1]=42进入 if 块,然后再次进入第二个循环,temp[0]=36因此它包含 temp 但它仍然进入。我如何解决这个问题以及为什么它返回 false 并且无法在. 谢谢。temp[1]=42Eklenenler[0][0]=36Eklenenler[0][1]=42tempEklenenler
您可以使用 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
{
}
Run Code Online (Sandbox Code Playgroud)
不要忘记添加
using System.Linq;
Run Code Online (Sandbox Code Playgroud)