繁体   English   中英

自己编程的 LINQ 扩展方法

[英]Own programmed LINQ extension methods

好吧,我有这个扩展方法:

public static TSource First<TSource>(this IEnumerable<TSource> source)
{ 
    IList<TSource> list = source as IList<TSource>;
    return list[0];
}

这就是我所说的:

doubles.First()

doubles是一个带有双数的列表

现在我想对我的persons列表使用相同的扩展方法。 我想这样称呼它:

persons.First(x => x.Age < 60)

我应该返回年龄小于 60 的第一个人。我必须在扩展方法的代码中进行哪些更改才能使其工作。 目前我无法编译,因为这个错误:

CS1501: No overload for method 'First' takes 1 arguments

您需要添加过滤器或谓词来完成您想要执行的操作。

我创建了这个例子让你看看https://dotnetfiddle.net/BnMktf


using System;
using System.Collections.Generic;
                    

public class Person
{
    public int Age {get; set; }
}

public class Program
{
    public static void Main()
    {
        var persons = new List<Person>();
        persons.Add(new Person() {Age = 60});
        persons.Add(new Person() {Age = 10});
        
        var result = persons.First(p => p.Age < 60);
        var resultWithoutParams = persons.First();
        Console.WriteLine(string.Format("This is the result {0}", result.Age));
        Console.WriteLine(string.Format("This is the result {0}", resultWithoutParams.Age));
    }
}

public static class Extensions {
    public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> filter = null)
    { 
        IList<TSource> list = source as IList<TSource>;
        if(filter == null)
            return list[0];
        
        foreach(var item in list) 
            if(filter(item)) return item;
        
        return default(TSource);
    }
}

此方法仅扩展列表,但不接受任何参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM