【问题标题】:(LIST) If property matches replace object else add object(列表)如果属性匹配替换对象,否则添加对象
【发布时间】:2014-03-30 09:06:17
【问题描述】:

如果某个对象属性与列表中的对象属性匹配,我正在寻找一种干净有效的方法来查找。如果为true则替换它,否则添加它。

我知道如何通过多种方式做到这一点。我的 .NET 方式,首先使用 if (list.any(predicate)) 然后获取对象并更改它的属性或替换整个对象。这将是低效的,因为我要遍历列表两次。

另一种可能性是手动循环。只需foreach 循环列表并检查它的属性,如果找到匹配项替换它并突破。这不会很像.NET 和“干净”。

我知道的更多,但我不是因为不正确的教导而来。我很想看看.NET 专业人士如何解决这个问题,可能不到 3 行。

【问题讨论】:

  • 对我来说,使用foreach 循环似乎非常“类似于.NET”。 Enumerable.Any 内部可能没有做任何不同的事情。

标签: c# .net predicate


【解决方案1】:

你可能会使用这样的东西:

var element = list.FirstOrDefault(predicate);
if (element == null)
{
    //adding
}
else
{
    //change element properties
}

【讨论】:

  • 这样,如果你想替换它或改变它的值,你必须在列表中再次查找元素。
  • @MennoGouw,不,只需更改您在第一行获得的element 的属性
  • 如果我更改“var 元素”,列表中的元素不会更改吗?
  • 如果您从第一行更改element,那么集合中的这个元素将被更改。在第一行中,您将获得元素上的链接(不是副本)。这是真的,如果元素是引用类型,当然
猜你喜欢
  • 2021-10-08
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多