[英]How to compare 2 lists values?
我有2個列表,當第二個列表中沒有第一個列表中的項目時,我想刪除這些項目。
public class ResolutionsRow
{
public String Name { get; set; }
public int ID { get; set; }
}
public List<ResolutionsRow> Categories { get; set; }
在下面的Category.LoadForProject(project.ID)中返回一個IList
DeleteItems(Category.LoadForProject(project.ID), Categories);
private void DeleteItems(dynamic currentItems, dynamic items)
{
if (currentItems != null)
{
foreach (var existingItem in currentItems)
{
if (items.Contains(existingItem.Name))
items.Remove(existingItem.Name);
}
}
}
我收到錯誤消息
'System.Collections.Generic.List.Contains(MvcUI.Models.ResolutionsRow)'的最佳重載方法匹配具有一些無效的參數。 我的代碼有什么問題,我該如何糾正? 請幫助。
我試圖將代碼更改為,但是出現錯誤信息
錯誤6參數1:無法從'int'轉換為API.Category'MvcUI \\ Models \\ ProjectModel.cs 255 44 MvcUI錯誤5'System.Collections.Generic.ICollection.Contains(API.Category)'的最佳重載方法匹配包含一些無效的參數MvcUI \\ Models \\ ProjectModel.cs 255 24 MvcUI
var categories = Category.LoadForProject(project.ID);
foreach (var item in Categories)
{
if(categories.Contains(item.ID))
{
}
}
什么是items
? 我猜這是ResolutionsRow
的列表-因此您將需要搜索具有該名稱/ ID的項目,而不是名稱/ ID本身。
如果它們是相同的對象實例,則僅Remove(existingItem)
將起作用,但是否則(如果它們是碰巧具有相同.Name
不同對象實例):
items.RemoveAll(item => item.Name == existingItem.Name);
順便說說; 您真的需要dynamic
嗎? 沒有它,編譯器會告訴您問題所在。 它無濟於事,並且很可能會引起很多問題(顯式接口實現,lambda等-某些結構不是dynamic
)
這是簡單的LINQ答案:
var currentItems = new int[] { 1, 2, 5, 6 };
var items = new int[] { 2, 3, 4, 5 };
var resultItems = items.Except(currentItems); // resultItems == new int[] { 3, 4 }
更改
items.Contains(existingItem.Name);
和
items.Remove(existingItem.Name);
至
items.Contains(existingItem);
items.Remove(existingItem);
您想使用items1.Except(items2)
您的items.Contains
方法簽名期望的類型不同於您提供的類型。 看起來您提供的是字符串而不是ResolutionsRow。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.