C# 如何在对象列表中查找单个项?

C# 如何在对象列表中查找单个项?,c#,list,object,C#,List,Object,我正在处理一个对象列表,我需要选择其中一个对象,并将其分配给一个变量,以便以后使用。我知道我需要在列表中使用.Find方法,但我不确定为了找到正确的对象需要在括号中放什么。我使用SDK定义的类与API交互,这对我来说是新的。这是我的密码: var fileCabinets = org.GetFileCabinetsFromFilecabinetsRelation().FileCabinet; foreach (var fc in fileCabinets) { Console.Write

我正在处理一个对象列表,我需要选择其中一个对象,并将其分配给一个变量,以便以后使用。我知道我需要在列表中使用.Find方法,但我不确定为了找到正确的对象需要在括号中放什么。我使用SDK定义的类与API交互,这对我来说是新的。这是我的密码:

var fileCabinets = org.GetFileCabinetsFromFilecabinetsRelation().FileCabinet;
foreach (var fc in fileCabinets)
{
    Console.WriteLine("You have access to the file cabinet " + fc.Name + " " + fc.Id + ".");
}

fileCabinets.Find();

FileCabines是FileCabinet类型的列表。我需要在列表中选择一个文件柜。

如果我正确理解您的问题,您可以使用FirstOrDefault

如果你想和Find呆在一起

使用Name属性筛选列表的步骤


如果我正确理解您的问题,您可以使用FirstOrDefault

如果你想和Find呆在一起

使用Name属性筛选列表的步骤

就像@Rainman所说的,如果名称可能不是唯一的,那么使用他的解决方案。如果您确定Name属性是唯一的,请使用此属性


就像@Rainman所说的,如果名称可能不是唯一的,那么使用他的解决方案。如果您确定Name属性是唯一的,请使用此属性。

几分钟后您就击败了我。为什么选择FirstOrDefault而不是SingleOrDefault?没有理由。我会说,习惯:在这种情况下,我们当然只期望一项。谢谢,我最终选择了Maarten的解决方案,因为我不一定要使用Id属性,在这种情况下,我实际上使用了Name属性和他的答案告诉我如何做,但这两个答案都非常有用。ThanksFirstOrDefault不会使程序崩溃,它只返回NULL。就我个人而言,我更喜欢FirstOrDefault,但在某些情况下,您肯定希望使用SingleOrDefault@Maartenhebink小更正:SingleOrDefault要求有0或1个匹配项。如果正好是1,那就用单曲。你只用几分钟就赢了我。为什么选择FirstOrDefault而不是SingleOrDefault?没有理由。我会说,习惯:在这种情况下,我们当然只期望一项。谢谢,我最终选择了Maarten的解决方案,因为我不一定要使用Id属性,在这种情况下,我实际上使用了Name属性和他的答案告诉我如何做,但这两个答案都非常有用。ThanksFirstOrDefault不会使程序崩溃,它只返回NULL。就我个人而言,我更喜欢FirstOrDefault,但在某些情况下,您肯定希望使用SingleOrDefault@Maartenhebink小更正:SingleOrDefault要求有0或1个匹配项。如果正好是1,那么就用Single。正是我要找的,谢谢实际上是我要找的,谢谢你没有定义你所说的列表是什么意思。你是说System.Collections.Generic.List吗?或者其他类型的列表?这将决定您可以使用什么方法查找列表中的项目。换句话说,文件柜的类型是什么?您没有定义列表的含义。你是说System.Collections.Generic.List吗?或者其他类型的列表?这将决定您可以使用什么方法查找列表中的项目。换句话说,文件柜的类型是什么?
var fileCabinet = fileCabinets.FirstOrDefault(x => x.Id == 1);
var fileCabinet = fileCabinets.Find(x => x.Id == 1);
var fileCabinet = fileCabinets.FirstOrDefault(x => x.Name == "Sample");
FileCabinet fileCabinet = fileCabinets.SingleOrDefault(x => x.(propertyName) == (valueToMatch));