代码说明:使用FirstorDefault()从Array中检索项
本文关键字:Array 检索 说明 使用 FirstorDefault 代码 | 更新日期: 2023-09-27 18:07:54
假设数组中有一些元素
Product[] myProducts = new Product[]
{
new Product { ID = 1, name = "Ketchup1", category = "Sauces", price = 200.00m },
new Product { ID = 2, name = "Ketchup2", category = "Sauces", price = 200.00m },
new Product { ID = 3, name = "Ketchup3", category = "Sauces", price = 200.00m }
};
然后我试着用这个方法检索
public Product GetProductById(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product;
}
我已经读了它的作用,但我不明白这里发生了什么:
FirstorDefault(p => p.Id == id);
FirstOrDefault(predicate)
遍历集合并返回与谓词匹配的第一个元素。在您的示例中,它将是具有p.Id == id
的第一个元素。当没有匹配谓词的值时,返回默认值(所有引用类型为null
)。
(p) => p.Id == id
是一个匹配Func<Product, bool>
的lambda表达式-它接受一个Product
类型的参数(它被命名为p
)并返回bool
值。
FirstOrDefault
可能看起来非常类似于它的eduLINQ等效:
public static TSource FirstOrDefault<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
// Argument validation elided
foreach (TSource item in source)
{
if (predicate(item))
{
return item;
}
}
return default(TSource);
}
这是需要满足的条件。
(p) => p.Id == id
是lambda函数,给定参数p返回p。id == id
在每个元素上调用它,直到它为真。
因此,product
将是第一个Id与给定Id匹配的元素,如果没有