如何自己写LINQ操作在哪里?



我自己写LINQ操作。目前,我在中遇到了的麻烦。看看我的代码,这是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?

您的MyWhere方法返回单个值,而不是值的枚举。在您的示例代码中,您调用MyWhere,它返回单个string值,然后您尝试将其分配给显式类型的IEnumerable<string>

如果你检查From的LINQ定义,你会发现它实际上返回一个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是如何工作的,阅读它的实际源代码并不难。

相关内容

  • 没有找到相关文章

最新更新