最近维护一批代码,其中包括一堆if...的使用,多的情况嵌套8、9层,痛苦不堪,所以搜寻一些可以降低if...else的方法来改善一下代码,写个简单总结。

第一种:

优化前

if (measuredValue > 8)
return 5 * measuredValue * measuredValue - 3; if (measuredValue > 4)
return 4 * measuredValue - 2; if (measuredValue >= 0)
return 3 * measuredValue - 1; return 2 * measuredValue;

使用列表和linq优化后(摘自:https://www.linkedin.com/pulse/if-less-programming-c-jiri-pokorny

using System;
using System.Linq; namespace ConsoleApp1
{
internal class Program
{
private static readonly MeasureTransform[] Transformations =
new MeasureTransform[]
{
// 这个顺序决定了判断先后顺序
new MeasureTransform(m => m > , m => * m * m - ),
new MeasureTransform(m => m > , m => * m - ),
new MeasureTransform(m => m >= , m => * m - ),
new MeasureTransform(m => true, m => * m)
}; private static void Main(string[] args)
{
var executor = Transformations.First(t => t.CanApply());
Console.Write(executor.Transform());
}
} internal class MeasureTransform
{
public MeasureTransform(Func<int, bool> canApply, Func<int, int> transform)
{
CanApply = canApply ?? throw new ArgumentNullException(nameof(canApply));
Transform = transform ?? throw new ArgumentNullException(nameof(transform));
}
public Func<int, bool> CanApply { get; set; }
public Func<int, int> Transform { get; set; }
}
}

第二种:使用逻辑运算符改善

using System;
using System.Linq; namespace ConsoleApp1
{
internal class Program
{ private static void Main(string[] args)
{
int a = ;
int b = ; // 优化前
if (a > )
{
if (b > )
{
Console.Write("");
}
} // 优化后
if (a > && b > )
{
Console.Write("");
}
}
}
}

第三种:从业务逻辑角度看看有没有多余的判断

using System;
using System.Linq; namespace ConsoleApp1
{
internal class Program
{ private static void Main(string[] args)
{
System.UInt32 a = ;
int b = (int)a + ; // 优化前
if (a > )
{
if (b > )
{
Console.Write("");
}
} // 优化后
if (a > )
{
Console.Write("");
}
}
}
}

第四种:使用三元运算符

优化前

namespace ConsoleApp1
{
internal class Program
{ private static void Main(string[] args)
{
System.UInt32 a = ;
uint c;
if (a > )
{
c = a;
}
else
{
c = a + ;
}
}
}
}

优化后

using System;
using System.Linq; namespace ConsoleApp1
{
internal class Program
{ private static void Main(string[] args)
{
System.UInt32 a = ;
int b = (int)a + ; // 优化前
var c = a > ? a : a + ; }
}
}

第五种:太多if..else if...效率低,使用switch...case...,也好看点。

第六种:从架构层面使用依赖注入,反射之类的,参考https://www.c-sharpcorner.com/forums/how-can-i-remove-multiple-if-statement

减少if...的使用的更多相关文章

  1. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  2. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  3. 小小改动帮你减少bundle.js文件体积(翻译)

    我已经从事过好多年的SPA开发工作,我发现很多的程序猿都从来不往 bundle.js 文件的体积上动脑筋,这让我有点懵逼. “安心洗路,等俺把代码混淆压缩后就一切666了”,若是有人这么说,我会翻白眼 ...

  4. Effective前端5:减少前端代码耦合

    什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...

  5. LVM 管理减少swap分区空间增加到根分区

    简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现 ...

  6. Arduino下LCD1602综合探究(下)——如何减少1602的连线,LiquidCrystal库,LiquidCrystal库中bug的解决方法

    一.前言: 上文中,笔者系统的阐述了1602的两种驱动方式,并简单的提到了Arduino的LiquidCrystal库.本文紧接上文,对以下两个问题进行更加深入的探讨:如何能够使1602对Arduin ...

  7. SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

    原文出处:http://www.cnblogs.com/wy123/p/5933734.html 先看常用的一种表结构设计方式: 那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全 ...

  8. FindBugs 入门——帮你减少代码中的bug数

    FindBugs 入门 FindBugs 作用 开发人员在开发了一部分代码后,可以使用FindBugs进行代码缺陷的检查.提高代码的质量,同时也可以减少测试人员给你报的bug数. 代码缺陷分类 根据缺 ...

  9. CDN的combo技术能把多个资源文件合并引用,减少请求次数

    CDN的combo技术能把多个资源文件合并引用,减少请求次数.比如淘宝的写法: <link rel="stylesheet" href="//g.alicdn.co ...

  10. 【前端开发】优化代码之减少引入,css预编译语言的优点,stylus的使用

    前言:我必须得承认在最最最开始的时候,我对于css的预编译是非常不以为然的,这是错误的.一般在页面编写过程中,我会将需要reset的css放在reset.css中,讲会需要重复用到的放置到public ...

随机推荐

  1. python --字符串学习

    一 转义字符 借用一个特殊的方法表示一系列不方便写出的内容,比如回车键,换行符,退格键 借助反斜杠字符,一旦出现反斜杠,则反斜杠后面一个或者几个字符表示已经不是原来的意思了 在字符串中,一旦出现了斜杠 ...

  2. select嵌套问题

    关于sql语句: SELECT COUNT(ID) FROM dbo.N_Order_BusinessBatch WHERE Mobile='15210235082' And CreateTime=( ...

  3. 基于MySQL 的 SQL 优化总结

    文章首发于我的个人博客,欢迎访问.https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 ...

  4. [Unity UGUI图集系统]浅谈UGUI图集使用

    **写在前面,下面是自己做Demo的时候一些记录吧,参考了很多网上分享的资源 一.打图集 1.准备好素材(建议最好是根据图集名称按文件夹分开) 2.创建一个SpriteAtlas 3.将素材添加到图集 ...

  5. NullPointerException异常没有异常栈打印问题追踪

    今天去服务器后台看日志,发现有很多NullPointerException异常.我下意识的找异常栈,想看下到底是哪行代码导致了空指针.但是发现日志中只打印出了如下日志: null java.lang. ...

  6. base64编码的字符串(含有中文) 前端解码

    base64编码的字符串(含有中文) 前端解码 https://xue5602.github.io/2018/12/19/atob%E8%A7%A3%E7%A0%81utf-8%E5%AD%97%E7 ...

  7. 11.Java连接Redis_Jedis_测试联通

    使用Java开发项目的时候使用Redis的话,目前有一些开源API可以使用. 最常用的就是jedis,它提供了许多基于Java的对象和方法来调用Redis的指令. jedis的jar包下载地址http ...

  8. 关于做好ASO工作的十点有效建议

    导语: 互联网上关于如何做好ASO的内容多种多样,鱼目混珠.有从数据分析角度的方法论:有从运营工具角度的方法论:也有从实践角度看如何做好的. 本文将“对症下药”,从影响ASO的十大因素出发,整理出一份 ...

  9. [SD心灵鸡汤]006.每月一则 - 2015.10

    1. 贫不足羞,可羞是贫而无志. 2. 艺术的大道上荆棘丛生,这也是好事,常人望而却步,只有意志坚强的人例外. 3. 古今中外,凡成就事业,对人类有作为的无一不是脚踏实地.艰苦攀登的结果. 4. 理想 ...

  10. 基于RBAC的权限控制浅析(结合Spring Security)

    嗯,昨天面试让讲我的项目,让我讲讲项目里权限控制那一块的,讲的很烂.所以整理一下. 按照面试官的提问流程来讲: 一.RBAC是个啥东西了? RBAC(Role-Based Access Control ...