Linq 中带有迭代索引的 Select 扩展方法 **惊喜发现**,要多研究源码哦
2023-09-14 09:10:47 时间
给多行文字加上数字列表项
- 常见写法,如下:但这里还是累赘了,因使用到了拉链函数
Zip
和生成范围的Range
,全纠缠到一块
using System.Linq;
static void ListIndex()
{
var list = new List<string>()
{
"csharp","csdn","Microsoft","GitHub"
};
// 关键代码
var items1 = list.Zip(Enumerable.Range(1, list.Count + 1), (item, i) => $"{i}. {item}").ToList();
items1.ForEach(Console.WriteLine);
}
Select的一个带迭代变量的重载方法,可以简单快速实现
- 实现同意功能,下面的代码,简洁明了许多
using System.Linq;
static void ListIndex()
{
var list = new List<string>()
{
"csharp","csdn","Microsoft","GitHub"
};
// 关键代码
var items = list.Select((item, i) => $"{i + 1}. {item}").ToList();{item}").ToList();
items1.ForEach(Console.WriteLine);
}
Select扩展方法的底层实现源码
从SelectIterator
枚举类可以看到,其实在底层也是单独给你定义了一个index
,然后逐一回调给你的回调函数。实现方法多是高阶函数,需要一定的技术功底
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (selector == null)
{
throw Error.ArgumentNull("selector");
}
return SelectIterator(source, selector);
}
private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
int index = -1;
foreach (TSource item in source)
{
index = checked(index + 1);
yield return selector(item, index);
}
}
相关文章
- Linux centos7下php安装cphalcon扩展的方法
- .NET 扩展方法 (二)
- ABP源码分析十五:ABP中的实用扩展方法
- IQueryable简单分页的扩展方法
- python开发应用笔记-SciPy扩展库使用
- JavaScript原生折叠扩展收缩菜单带缓冲动画
- Swift扩展(Extension)
- 解决sourcetree提示您没有已经配置扩展集成设置的远端
- c# string 扩展方法
- Linq之扩展方法
- MFC Windows 程序设计[259]之扩展Checkbox框(附源码)
- C# 参数带this是什么意思(扩展方法)
- 41. SAP UI5 应用 Chrome 扩展 UI5 Inspector 的离线安装和使用方法
- SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法试读版
- C# 参数带this是什么意思(扩展方法)
- 【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法
- 如何使用Key User Tool扩展SAP S/4HANA Fiori UI
- Android kotlin 扩展方法和扩展属性的用法
- SPI:Java的高可扩展利器
- 非暴力拆解:小熊派NB-IoT通信扩展板
- 【Groovy】Groovy 扩展方法 ( 实例扩展方法配置 | 扩展方法示例 | 编译实例扩展类 | 打包实例扩展类字节码到 jar 包中 | 测试使用 Thread 实例扩展方法 )
- 【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
- VS 遇到异常 可能是某个扩展导致的 解决方法 和提升程序管理员权限的方法
- PostgreSQL的学习心得和知识总结(七十六)|深入理解PostgreSQL数据库客户端工具psql元命令 扩展表格式化模式 的作用原理和使用方法
- C# 扩展方法
- EC2 中扩展与缩减的方法
- 【RPA进阶】 一文了解使用Visual Studio扩展UiPath Activity Creator创建自定义Activity