c# 根据另一个 List<int> 删除自定义列表中的项目

标签 c# list

我有一个自定义列表List。返回所有项目。 Info的结构如下:

public class Info
  {
    public string Code { get; set; }
    public string ClinicianDescription { get; set; }
  }

我想从列表中排除任何 Info 对象,其中 Code 属性等于单独列表中的任何值。

在一个干净的方法之后,我尝试使用 .Except(),但我必须将 List 转换成相同的对象,这似乎不正确。

到目前为止我已经尝试过这样的事情:

List<int> ids = contactList;
var List<Info> test = info.RemoveAll(x => ids.Any(i => i == x.Code));

最佳答案

您可以使用 Except,尽管这需要一个 IEnumerable,而不是谓词,并且在确定 equivalence of two objects 时将其与自定义类一起使用时需要小心

var blackListCodes = contactList.Select(i => i.ToString()); 
var test = info.Except(info.Where(i => blackListCodes.Contains(i.Code)));

但正如 Tomassino 指出的那样,这可以颠倒和简化为:

var test = info.Where(i => !blackListCodes.Contains(i.Code))

请注意,这将投影一个可枚举,而不是更改现有 info 中的元素,RemoveAll 会这样做。

只是一些其他要点 - 关于您的代码示例:

  • 正如其他人所指出的,Code 匹配中使用的类型在比较中需要兼容,即您不能将 string Codeids 中的整数。在这里,因为我们在同一个源集合上使用 .Except,元素的比较将按预期工作,即使它依赖于默认引用相等性(因为它在两个 中都是相同的元素引用IEnumerables).

  • RemoveAll返回一个表示从列表中删除的元素数量的 int - 结果不能分配给另一个 List

关于c# 根据另一个 List<int> 删除自定义列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50488431/

相关文章:

c# - Linq 查询返回保存每个传递对象的 max DateTime 属性的数据结构

Python 遍历嵌套列表,但只遍历偶数索引

python - 从列表组合生成 Python 字典

python - 如何找到哪个对象在for循环中导致错误?

python - 按第一个元素 float 对包含字符串的元组列表进行排序 (Python)

C#/.NET 如何从类名中找到包含的命名空间

c# - 如何使用 Microsoft.Office.Interop.Word.Document.PrintOut() 将 docx 打印到特定打印机

c# - Foreach 不会将每个项目从 foreach 添加到 ViewModel

c# - LINQ 和大数据库中的选择行

c++ - 将派生类列表传递给需要 C++ 中基类列表的函数