这应该很容易,但是我没有理解为什么我的所有方法都不起作用。
我查看了所有解决方案并适当地使用了它们但是没有得到结果。
解决方案包括
以下是代码:
IEnumerable<feature> available = _repo.GetAvailableFeatures();
IEnumerable<feature> selected = _repo.GetSelectedFeatures();
使用
除外var filteredList = (available.Except(selected)).ToList;
使用Linq
var availableList = available.ToList();
var selectedList = selected.ToList();
availableList.RemoveAll(item => selectedList.Contains(item));
使用旧时尚
for (var i = 0; i < availableList.Count - 1; i++)
{
foreach (var t in selectedList)
{
if (availableList[i].Id == t.Id)
{
availableList.RemoveAt(i);
}
}
}
我的Feature类看起来像这样:
public class Feature
{
public int Id;
public int Desc;
}
有人能看到我的错误吗?
答案 0 :(得分:3)
当您使用// private MainMenuScene mainMenuScene;
// instance = this;
时,您需要定义&#34;等于&#34;表示Except
类型,否则默认使用引用相等(它们是相同的对象)。在你的循环中,你定义&#34;等于&#34; as&#34; feature
s相等&#34;,所以有些选项是:
Id
课程中的Equals
和GetHashCode
feature
的类
使用IEqualityComparer<feature>
代替Where
:
Except
答案 1 :(得分:0)
这看起来像是将两个数据列表相互比较并以标准方式删除它们的简单过程。我个人会使用List设置而不是IEnumerable。
List<Feature> availableList = _repo.GetAvailableFeatures();
List<Feature> selectedList = _repo.GetSelectedFeatures();
foreach(Feature avail in availableList){
if(selectedList.Contains(avail)){
selectedList.Remove(avail)
}