如何使用LINQ选择对象多属性并生成指定顺序的数字列表?
用LINQ实现按顺序展开对象属性生成数字列表
直接用SelectMany就能搞定,它的作用是把每个元素转换成一个子序列,再将所有子序列合并成一个大序列,正好匹配你要的start1, end1, start2, end2...的顺序。
先假设你的对象类定义如下:
public class MyObj { public int Start { get; set; } public int End { get; set; } }
对应的LINQ实现代码:
// 你的已排序对象列表 List<MyObj> myList = GetSortedObjects(); // 生成目标数字列表 List<int> result = myList.SelectMany(obj => new[] { obj.Start, obj.End }).ToList();
原理说明
SelectMany遍历myList里的每个对象,把每个对象映射成一个包含Start和End的int数组,然后自动将所有这些数组合并成连续的序列,最后转成List<int>就是你需要的结果。
如果需要更直观的写法,也可以用yield return自定义扩展方法,但上面的数组写法是最简洁高效的。
内容的提问来源于stack exchange,提问作者rickster26ter1
相关产品推荐
相关产品推荐

