c# - 自己编程的 LINQ 扩展方法
问题描述
好吧,我有这个扩展方法:
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)
我应该返回 Age < 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);
}
}
此方法仅扩展列表,但不接受任何参数。
推荐阅读
- java - 两个日期之间的持续时间 Java
- python - 计算组之间的移动平均值并在一些连续的组之间进行平滑
- javascript - 项目未从数组中删除
- python - Flask Admin,但用于 AIOHTTP
- c++ - 这个 C++ 代码会一直按我的预期工作,还是不能保证执行顺序?
- java - 我正在使用 JNDI 连接到 mysql 数据库,但在执行时它最终抛出异常
- machine-learning - 对特征选择预处理进行交叉验证的动机是什么?
- activecollab - 用于报告的 API
- powershell - powershell Collection 已修改停止所有正在运行的手动服务
- sql - SSRS 多值参数过滤