[英]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.