在C#中使用带有方法的条件表达式

时间:2018-04-30 17:37:26

标签: c#

我有一个List<Animal>,其中Animal有一个:

int GetId(); 

返回动物的Id。

鉴于Id,获得特定动物的最佳方法是什么?我想知道是否有正确的方法来执行以下操作:

targetId = 2;
targetAnimal = animalList.Select(a => a.GetId() == targetId)

4 个答案:

答案 0 :(得分:3)

您可以尝试这些方法

。单独或.SingleOrDefault

targetAnimal = animalList.SingleOrDefault(a => a.GetId() == targetId)

.First或.FirstOrDefault

targetAnimal = animalList.FirstOrDefault(a => a.GetId() == targetId)

您可能想了解有关这些功能的更多信息

Single() - 正好有1个结果,如果没有返回结果或多个结果,则抛出异常。

SingleOrDefault() - 与Single()相同,但它可以处理空值。

First() - 至少有一个结果,如果没有返回结果则抛出异常。

FirstOrDefault() - 与First()相同,但不会抛出任何异常,或者在没有结果时返回null。

答案 1 :(得分:1)

您可以尝试使用FirstOrDefault

var targetAnimal = animalList.FirstOrDefault(a => a.GetId() == targetId);

如果列表中找到了IdtargetId匹配的动物,则会将其分配给targetAnimal。否则targetAnimal将为空。

有关此方法的详细信息,请查看here

答案 2 :(得分:1)

您可以使用FirstFirstOrDefault方法。

如果没有元素具有ID,前者将抛出异常;后者将返回default(T)(对于引用类型(类)将为null,并为值类型(struct)初始化为默认值的所有字段。)

return animalList.First(a => a.GetId() == targetID);

return animalList.FirstOrDefault(a => a.GetId() == targetID);

如果要返回默认/回退值而不是default(T),可以使用null-coalescing运算符:

return animalList.FirstOrDefault(a => a.GetId() == targetID) ?? theFallbackValue;

答案 3 :(得分:1)

选择是“选择”值,如果需要类型,则要使用“过滤”进行过滤。

示例:

targetAnimal = animalList.Where(animal => animal.GetId() == targetId)
                         .First()

但是,首先承认条件,因此您可以跳过Where并直接使用First:

targetAnimal = animalList.First(animal => animal.GetId() == targetId)

此外,如果没有找到具有该Id的动物,则会抛出错误。如果您希望它返回null,请使用FirstOrDefault

targetAnimal = animalList.FirstOrDefault(animal => animal.GetId() == targetId)