首页 > 编程语言 >c#代码重构与迭代(一)——循环代码的优化

c#代码重构与迭代(一)——循环代码的优化

时间:2023-04-22 15:57:44浏览次数:35  
标签:GetInstance 迭代 c# 代码 UserID item && var null

  foreach (var item in list)
            {
                Devices _Device = DevicesLogic.GetInstance().GetDevices(item.DeviceID);
                string addr = item.Address;
                if (addr.Trim() == "")
                {
                    addr = LocationAPI.GetAddressNew(item.OLat, item.OLng);
                }
                var ur = UserGroupRelationLogic.GetInstance().GetDeviceGroup(item.DeviceID, model.UserID);
                var profile = PersonProfileLogic.GetInstance().GetProfileByDevice(item.DeviceID);
                string Nickname = "";
                if (profile != null)
                    Nickname = profile.Nickname ?? "";
                if (ur != null && _Device != null && model.UserID != _Device.UserID && !ur.NickName.IsNullOrEmpty())
                {
                    Nickname = ur.NickName;
                }
           }

 

var deviceLogic = DevicesLogic.GetInstance();
            var userGroupRelationLogic = UserGroupRelationLogic.GetInstance();
            var personProfileLogic = PersonProfileLogic.GetInstance();

            Parallel.ForEach(list, (item) =>
            {
                var deviceId = item.DeviceID;
                var device = deviceLogic.GetDevices(deviceId);
                if (device == null || model.UserID == device.UserID) return;

                var address = string.IsNullOrWhiteSpace(item.Address) ? LocationAPI.GetAddressNew(item.OLat, item.OLng) : item.Address;

                var deviceGroup = userGroupRelationLogic.GetDeviceGroup(deviceId, model.UserID);
                var nickname = deviceGroup != null && !string.IsNullOrWhiteSpace(deviceGroup.NickName)
                    ? deviceGroup.NickName
                    : (personProfileLogic.GetProfileByDevice(deviceId)?.Nickname ?? "");

            });

  

优化说明:

  1. 使用Parallel.ForEach并行循环,这样能够同时处理多个元素,提高代码执行效率;
  2. 并行循环还需要保证线程安全,所以在循环体内部不要修改共享资源;
  3. 优化方式与之前相同,对列表中每个元素进行逐一处理,并简化代码逻辑。
  4. 将DevicesLogic、UserGroupRelationLogic和PersonProfileLogic实例化放在循环外部,避免在每次迭代中重复实例化;
  5. 使用var关键字提高代码可读性和简洁性;
  6. 简化addr变量赋值逻辑;
  7. 改善条件语句if(ur != null && _Device != null && model.UserID != _Device.UserID && !ur.NickName.IsNullOrEmpty())的结构;
  8. 简化deviceName变量赋值逻辑。

 

标签:GetInstance,迭代,c#,代码,UserID,item,&&,var,null
From: https://www.cnblogs.com/DinAction/p/17343223.html

相关文章

  • vector动态数组库
    #include<vector>usingnamespacestd;vector<int>vec1;//定义一个空的vector,元素类型为intvector<int>vec2(10);//定义一个大小为10的vector,元素类型为int,初始值为0vector<int>vec3(10,1);//定义一个大小为10的vector,元素类型为int,初始值为1vector<int>vec4={1,2,......
  • C++恶意软件开发(五)Linux shellcoding
    什么是shellcode?Shellcode通常指的是一段用于攻击的机器码(二进制代码),可以被注入到目标计算机中并在其中执行。Shellcode的目的是利用目标系统的漏洞或弱点,以获取系统控制权或执行恶意操作。它的名称来自于它经常被注入到攻击者编写的恶意软件的shell环境中,以便让攻击者可以更......
  • 深入 NODEJS 源码探究 CPU 信息的获取与利用率计算
    在Linux下我们通过top或者htop命令可以看到当前的CPU资源利用率,另外在一些监控工具中你可能也遇见过,那么它是如何计算的呢?在Nodejs中我们该如何实现?带着这些疑问,本节会先从Linux下的CPU利用率进行一个简单讲解做一下前置知识铺垫,之后会深入Nodejs源码,去探讨如何......
  • JOISC2020 Day2 T3 遗迹
    考虑给你\(h\),怎么整体得到最后的\(a\)这里感觉不能去想让一个位置\(x\)留下来的冲要条件,不然可能就做不出来了。自然的想法:从$2n$到\(1\)遍历每个\(h_i\),然后从\(h_i\)到\(1\)找第一个没有标记的值\(x\),此时\(i\)能留下来,如果找不到\(x\),那么\(i\)无法留下来......
  • VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法
    目录问题背景问题描述测试代码测试结果现象描述问题分析解决方案修改默认配置1.已经存在的文件全部使用gbk编码重新保存。2.在工程目录下新建.vscode目录,如果已存在则跳过此步骤。3.在.vscode目录中新建settings.json,launch.json两个文件,已有则跳过。4.settings.json文件添加......
  • python opencv Sharpened
    pythonopencvSharpened importcv2importnumpyasnp#Loadtheimageimg=cv2.imread('20230222100736979.jpg')#Definethesharpeningkernelkernel=np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]])#Applythekerneltotheimagesharpened......
  • ctype.h常用方法
    intisalpha(intc)函数作用:判断字符c是否为字母(a-zA-Z)参数说明:c为要判断的字符返回值:如果是字母,返回非0值;否则返回0示例代码:charch='A';if(isalpha(ch)){  printf("%c是字母\n",ch);}else{  printf("%c不是字母\n",ch);}intisdigit(intc)函数作用:判......
  • 铺垫知识jwt工具类使用、登录接口实现细节分析和代码实现、测试接口
    铺垫知识jwt工具类使用JWT工具类:JWTUtilpublicstaticvoidmain(String[]args)throwsException{//加密Stringjwt=createJWT("2123");System.out.println(jwt);//解密Claimsclaims=parseJWT("eyJhbGciOiJIUzI1......
  • SpringSecurity过滤器之ExceptionTranslationFilter
    ExceptionTranslationFilter是处理AuthenticationException(身份认证异常)和AccessDeniedException(权限异常)。ExceptionTranslationFilter用法和源码分析参考一文搞定SpringSecurity异常处理机制!。 AuthenticationEntryPoint是处理AuthenticationException,默认实现是LoginUrl......
  • ctfhub--SQL
    CTFHUB-SQL注入**一、SQl注入的基础1.介绍SQL注入SQL注入就是指WEB应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过构造不同的SQL语句来是实现对数据库的任意操作。一般情况下,开发人员可以使用动态SQL语句创建......