Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#根据另一个列表删除自定义列表中的项目<;int>;_C#_List - Fatal编程技术网

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();