我正在自己撰寫 LINQ 操作。目前,我在where上遇到了問題。看看我的代碼,這是MyWhere方法:
public static T MyWhere<T>(this IEnumerable<T> myLst, Predicate<T> predicate)
{
T whereItem = default;
foreach (var item in myLst)
{
if (predicate.Invoke(item))
{
whereItem = item;
continue;
}
}
return whereItem;
}
這是在主要方法中:
var myWhereItem = fruits.MyWhere(fruit => fruit.Length < 6);
Console.Write("MyWhere: ");
foreach (string item in myWhereItem)
{
Console.Write(myWhereItem ", ");
}
我如何撰寫 Where 方法,目前它是 LastOrDefault?
uj5u.com熱心網友回復:
您的MyWhere方法回傳單個值,而不是值的列舉。在您的示例代碼中,您呼叫MyWherewhich 回傳一個string值,然后您嘗試將其分配給顯式型別的IEnumerable<string>.
如果您檢查 LINQ定義,From您會發現它實際上回傳了一個IEnumerable<TSource>. 如果您試圖復制 LINQ 功能(這可能是一個非常糟糕的主意),最簡單的選擇(在現代 C# 中)是使用可列舉方法:
public static IEnumerable<T> MyWhere<T>(this IEnumerable<T> sequence, Predicate<T> predicate)
{
foreach (var item in sequence)
{
if (predicate(item))
yield return item;
}
}
(這只是語法糖(編譯器支持的速記),IEnumerable<T>在后臺生成完整的實作,更容易實作。)
如果您只是想弄清楚 LINQ 是如何作業的,那么閱讀它的實際源代碼并不難。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334520.html
上一篇:Terraform匯入地圖資源
