【问题标题】:I want to create multiple objects in list<object> and remove them with the desired id我想在 list<object> 中创建多个对象并使用所需的 id 删除它们
【发布时间】:2021-11-04 00:54:50
【问题描述】:

我想用所需的 id 删除它。

你能告诉我是否有其他方法可以用 Linq 做到这一点吗?

我想我可以使用 Select() 和 Where(),但它不起作用。

var list = new List<object>() { };
list.Add(new { id = 3, const = "22"});
list.Add(new { id = 4, const = "22"});
list.Add(new { id = 6, const = "22"});
list.Add(new { id = 2, const = "22"});
list.Add(new { id = 1, const = "22"});

//example
list.Remove(new { id = 2, const = "22" });

【问题讨论】:

标签: c# list listobject


【解决方案1】:

首先const是C#中的一个关键字,所以要么避免使用它作为成员名,要么用@装饰来转义它。

由于您的列表项类型是object,您需要将它们转换为dynamic 以允许访问“未知”id -> 这是一种非常模糊的方法,但它有效。 =在C#中的意思是:设置...的值所以如果你想比较相等,你需要==

总之:

  var list = new List<object>();
  list.Add(new { id = 4, @const = "22" });
  list.Add(new { id = 4, @const = "22" });
  list.Add(new { id = 6, @const = "22" });
  list.Add(new { id = 2, @const = "22" });
  list.Add(new { id = 1, @const = "22" });

  list.RemoveAll(i => ((dynamic)i).id == 2);

会起作用的。

考虑为您的列表项使用自己的类型,匿名类型应仅在 GroupBy 等查询中“本地”使用。

【讨论】:

    【解决方案2】:

    你可以试试:

    list.RemoveAt(list.FindIndex(item => item.id == 1));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多