在列表<对象>中搜索对象
本文关键字:对象 搜索 列表 | 更新日期: 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();