c#根据另一个列表删除自定义列表中的项目<;int>;
我有一个自定义列表。返回所有项目。信息的结构如下:c#根据另一个列表删除自定义列表中的项目<;int>;,c#,list,C#,List,我有一个自定义列表。返回所有项目。信息的结构如下: public class Info { public string Code { get; set; } public string ClinicianDescription { get; set; } } 如果代码属性等于单独列表中的任何值,我想从列表中排除任何信息对象 在使用了一种干净的方法之后,我尝试了使用.Except(),但我必须将列表转换为同一个对象,这似乎不正确 到目前为止,我已经尝试过类似的方法: Li
public class Info
{
public string Code { get; set; }
public string ClinicianDescription { get; set; }
}
如果代码属性等于单独列表中的任何值,我想从列表中排除任何信息对象
在使用了一种干净的方法之后,我尝试了使用.Except(),但我必须将列表转换为同一个对象,这似乎不正确
到目前为止,我已经尝试过类似的方法:
List<int> ids = contactList;
var List<Info> test = info.RemoveAll(x => ids.Any(i => i == x.Code));
List id=联系人列表;
var List test=info.RemoveAll(x=>ids.Any(i=>i==x.Code));
您可以使用除之外的,尽管这需要一个IEnumerable
,而不是谓词,并且在确定
但正如托马西诺所指出的,这一点可以颠倒并简化为:
var test = info.Where(i => !blackListCodes.Contains(i.Code))
请注意,这将投影一个新的可枚举项,而不是更改现有info
中的元素,而RemoveAll
就是这样做的
还有其他几点-关于您的代码示例:
- 正如其他人指出的那样,
code
匹配中使用的类型需要在比较中兼容,即不能将string code
与ids
中的int进行比较。这里,因为我们在同一个源集合上使用。除了
,元素的比较将按预期工作,即使它依赖于默认的引用相等(因为它在两个IEnumerables
中都是相同的元素引用)
- 返回一个整数,表示从列表中删除的元素数-结果不能分配给另一个
列表
您也可以使用这种方法:
List<Info> info = new List<Info>();
//fill info with objects
List<string> excludeCodes = new List<string>();
//fill excludeCodes with values
var result = info.Where(i => !excludeCodes.Contains(i.Code)).ToList();
List info=new List();
//用对象填充信息
List excludeCodes=新列表();
//用值填充ExcludeCode
var result=info.Where(i=>!excludeCodes.Contains(i.Code)).ToList();
为什么不能像这样使用Contains()
List<Info> test = info
.Where(i => !ids.Contains(i.Code)).ToList();
List test=info
.Where(i=>!ids.Contains(i.Code)).ToList();
您尝试将字符串与int进行比较 为什么不使用循环呢?你在寻找一条干净的路还是一条艰难的路?var列表测试
。。。将导致编译错误,尽管这不起作用,因为i
是int
。需要解析其中一个或在另一个上调用ToString()。
List<Info> test = info
.Where(i => !ids.Contains(i.Code)).ToList();