在列表<对象>中搜索对象

本文关键字:对象 搜索 列表 | 更新日期: 2023-09-27 17:57:02

我有这个包含Story类实例的List

List<Story> Stories = new List<Story>();
public class Story
{
    public string Id { get; set; }
    public double Height { get; set; }
    public double Elevation { get; set; }
}

列表中的每个实例都是唯一的:

Stories = {Story1, Story2, ...}

现在在另一种方法中,我想在List中搜索特定Story并将整个对象分配给新创建的对象

Story st = Find a Story in the Stories that its Story.Id=="Story2"

我该怎么做?

在列表<对象>中搜索对象

可以将 LINQ 与任一方法语法一起使用:

Story st = Stories.Where(x => x.Id == "Story2").FirstOrDefault();

或查询语法:

Story st = (from story in Stories
              where story.Id.Equals("Story2")
              select story).FirstOrDefault();

您可以在语句末尾使用 Single()First()FirstOrDefault()SingleOrDefault。这是它们之间的区别。

  • First() - 如果为空/未找到则抛出,如果重复则抛出,则不抛出
  • FirstOrDefault() - 如果为空/未找到,则返回默认值,如果重复则不抛出
  • Single() - 如果为空/未找到则抛出,如果存在重复项则抛出
  • SingleOrDefault() - 如果为空/未找到,则返回默认值,如果存在重复项,则抛出

因为"列表中的每个实例都是唯一的"

Story st = Stories.FirstOrDefault(x=>x.Id == "Story2");

或者

Story st = Stories.Single(x=>x.Id == "Story2");

不同之处在于,如果未找到任何内容,第一个将返回默认值,在这种情况下,第二个将引发异常

使用 LINQ:

var story = stories.Where((p) => p.Id == "Goldilocks").FirstOrDefault();