带有通用列表的C#RemoveAll显示错误

时间:2014-07-23 11:30:44

标签: c# delegates removeall

我正在做一个SAT求解器(主要是DPLL或部分DPLL),我有单元传播的方法。基本上它的作用是它检查是否有任何独立的文字,并删除该文字,以及在其他子句中找到的任何实例。任何例子都是

(x) (x,y) (w,z)

单位传播将为'x',并且在执行单位道具时,它将仅留下(w,z)

在这个方法中,我有几个嵌套的foreach循环,而List<literals> <literals>是一个自定义类,它有2个变量hasNegation(bool)和char {{1} }

编码如下,并将从下面解释

literalCharacter

我有2 foreach (clauses c1 in listOfClauses) { if (c1.listOfLiterals.Count == 1) { literals l1 = c1.listOfLiterals[0]; solved.Add(l1); foreach (clauses c2 in listOfClauses) { List<literals> tempList = new List<literals>(); foreach (literals l2 in listOfLiterals) { if (l2.solveDPLL(l1)) { removable.Add(c2); } else { if (c2.listOfLiterals.Count == 1) { UNSAT = true; return false; } else { if (l1.solveDPLL(l2)) { tempList.Add(l2); } } } c2.listOfLiterals.RemoveAll(tempList); //obviously giving error } } } } return true; } List <literals>templist,其中LATTER是“父母”

我尝试删除与listOfLiterals匹配的listOfLiterals条目,我使用tempList显然会输出错误,因为它不是代表。

我搜索了很多,甚至在stackoverflow上,但是每一个都比较ID或整数。在我的例子中,因为我只是比较2 c2.listOfLiterals.RemoveAll(tempList);,我怎么能做委托,以便listOfLiterals和tempList中相同的条目从 listOfLiterals? <中删除/ p>

非常感谢


编辑:

文学课

Lists

1 个答案:

答案 0 :(得分:1)

如果你可以使用一点LINQ魔法:

c2.listOfLiterals = c2.listOfLiterals.Except(tempList).ToList();

或循环遍历tempList

foreach (var item in tempList)
{
    c2.listOfLiterals.Remove(item);
}

您可能需要literals课程来实施IEqualityComparer<literal>,然后为EqualsGetHashCode提供实施方案。有关此问题的详细示例,请参阅MSDN page for Except