在平时开发中经常会看到有些朋友或者同事在写代码时会充斥着各种for,foreach,这种程式代码太多的话阅读性特别差,而且还显得特别累赘,其实在FCL中有很多帮助我们提高阅读感的方法,而现实中很多人不会用或者说不知道,这篇我就跟大家聊一聊。

一:SelectMany

这个方法绝对是提高开发速度的一大利器,有太多的业务场景需要使用这个函数,举一个我实际应用场景,商家按照年份和客户类型预先设置一些标签,然后让系统跑一下它的各自标签到底有多少人?

1. 定义Model

为了方便演示,这里做了一下简化代码,只有一个字典,key表示年份,value:就是该年份的多组标签。


public class EstimateModel
{
public int ShopID { get; set; } //key: 年份
public Dictionary<string, List<TagCrowdFilterModel>> YearCrowdFilterDict { get; set; }
} public class TagCrowdFilterModel
{
/// <summary>
/// 筛选条件
/// </summary>
public string CrowdFiter { get; set; } /// <summary>
/// 获取人数
/// </summary>
public int TotalCustomerCount { get; set; }
}

为了更加清晰,我决定再填充一下数据

        public static void Main(string[] args)
{
var estimateModel = new EstimateModel()
{
ShopID = 1,
YearCrowdFilterDict = new Dictionary<string, List<TagCrowdFilterModel>>()
{
{
"17年",new List<TagCrowdFilterModel>()
{
new TagCrowdFilterModel(){ CrowdFiter="between 10 and 20" },
new TagCrowdFilterModel(){ CrowdFiter=" a<10 || a>30" },
}
},
{
"18年",new List<TagCrowdFilterModel>()
{
new TagCrowdFilterModel(){ CrowdFiter="between 100 and 200" },
new TagCrowdFilterModel(){ CrowdFiter=" a<100 || a>300" },
}
},
{
"19年",new List<TagCrowdFilterModel>()
{
new TagCrowdFilterModel(){ CrowdFiter="between 1000 and 2000" },
new TagCrowdFilterModel(){ CrowdFiter=" a<1000 || a>3000" },
}
}
}
};
} public static int GetCustomerID(string crowdfilter)
{
return BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0);
}

2. 实现需求

需求也很简单,就是依次获取 TagCrowdFilterModel 中的 CrowdFiter 字段再调用GetCustomerID方法把人数赋值给TotalCustomerCount即可,这么简单的需求,如果让你来搞定,你该怎么实现这个逻辑? 没错,很多人可能就是两个foreach搞定。

        foreach (var year in estimateModel.YearCrowdFilterDict.Keys)
{
var yearCrowdFitlerList = estimateModel.YearCrowdFilterDict[year]; foreach (var crowdFitler in yearCrowdFitlerList)
{
crowdFitler.TotalCustomerCount = GetCustomerID(crowdFitler.CrowdFiter);
}
}

看似代码也很清爽,但现实哪有这么好的事情,真实情况是年份上可能还要套上一个客户类型,客户类型之上再套一个商品,商品之上再套一个商家,这样很深的层级你就需要多达3个foreach,4个foreach甚至5个foreach才能搞定,再放张图给大家看看,是不是看着头大...

最新文章

  1. doPost()和doGet()
  2. iOS_UIImage_Gif的合成
  3. Windows 8操作技巧之快捷键大全
  4. Library string Type
  5. C 产生随机码
  6. salon_百度百科
  7. 关于vue 框架与后台框架的混合使用的尝试
  8. Centos7 二进制安装 Kubernetes 1.13
  9. 性能测试遭遇TPS抖动问题
  10. NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享
  11. BitMap位图与海量数据的理解与应用
  12. c++内存管理的一些资料
  13. php数组的逐行写入文件与读取
  14. day6需要记忆(元组字典集合)
  15. 【kafka学习之四】kafka集群性能测试
  16. python基础_特殊符号
  17. 利用localStorage实现对ueditor编辑内容定时保存为草稿
  18. Android开发之获取系统所有进程信息。
  19. [BZOJ 2322][BeiJing2011]梦想封印
  20. 782E. Underground Lab DFS 好题

热门文章

  1. js 数组 方法
  2. kafka原理解析
  3. 《自拍教程46》Python_adb自动拍照100张
  4. React笔记1
  5. Git 基础入门
  6. 小程序中内容审核功能的使用(后台使用thinkPHP5.1)
  7. 【Weiss】【第03章】增补附注
  8. 增删改查-java(新手)
  9. Linux中更换为国内镜像源
  10. 我的第一个html静态网页