一个小技巧助您减少if语句的状态判断
共 1445字,需浏览 3分钟
·
2020-12-19 13:20
在进行项目的开发的过程中, if
语句是少不了的,但我们始终要有一颗消灭 if
/ else
语句的心。为了消灭if
/ else
我们引入了 短路器
的概念。短路器
有时候的确能精简我们的代码,但还不够,因此我参考了一个方法来继续消灭一部分 断路器
中的 if
语句。接下来就让我们拿一段事例代码来一步一步的演示下吧。
如下一段比较典型if 断路器
代码:
if (someConditionIsMet)
{
throw new SomeSpecificException("message");
}
//someConditionMetCode
这里代码虽然没什么问题,但是我个人还是不喜欢用 if
的语句声明。我更喜欢的是:
Assert.That(someConditionIsMet, "message");
但是这样子的话我们就无法指定 Exception
的类型了,因此我们可能需要的是下面这样子的:
Assert.That<MyException>(someConditionIsMet, "message");
但是基类Exception
虽然具有无参数的构造函数,但是在创建异常之后,不允许我再给 Message
进行赋值了。因为,Message是Exception
类中的只读属性。
public virtual string Message { get; }
我的解决方案是使用Activator.CreateInstance并传入要实例化的特定异常类型以及异常消息。如下代码所示:
public static class Assert
{
public static void That<T>(bool condition, string msg) where T : Exception, new()
{
if (condition)
{
var ex = Activator.CreateInstance(typeof(T), new object[] { msg }) as T;
throw ex;
}
}
}
至此,结束。开头的那段代码就可以通过变通的方式把 if
语句给移除了,显得代码更精简,你觉得呢?当然,如果你有更好的处理方式也可以留言告诉我。
参考自:https://www.codeproject.com/Tips/5289739/Assert-with-assertion
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
【.NET Core微服务实战-统一身份认证】开篇及目录索引
Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)
.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
用abp vNext快速开发Quartz.NET定时任务管理界面