簡體   English   中英

代碼說明:使用FirstorDefault()從Array中檢索項目

[英]Explanation of Code : retrieve item from Array using FirstorDefault()

可以說我在數組中有一些項目

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匹配的第一個元素,如果不存在,則為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM