周末更新了一下项目,开始使用可空引用类型,而且移除了 net45
的支持,仅支持 netstandard2.0
git
net45
Support基础库打算移除 net45
的支持,由于不少基础的API,在 netstandard2.0
中是有的,可是 net45
是没有的,好比 Array.Empty
/Task.CompletedResult
等,因此不少时候须要为 net45
专门写一些代码来实现相似的功能,并且随着 .NET Core 的开发者愈来愈多,.NET Core 愈来愈成熟,因此打算抛弃 net45
也可使得维护更为方便和简单。github
新版本彻底启用了 Nullable Reference Types
可空引用类型,之因此启用可空引用类型,一来是但愿可以为开发者们使用提供更好的体验,开发者在开发的时候,就能够知道本身用到的 API 输入参数是否容许为 null
,若是不容许为 null
开发者能够在调用 API 以前检查 null
,避免输入一个不指望的 null
,对于 API 的返回值也会更加清晰,能够清晰地了解一个 API 的返回值是否会为 null
,若是会为 null
则可能须要作空检查,若是不会为 null
就不须要作没必要要的空检查了。测试
提供了一个示例项目,示例项目是 dotnet core 3.1 的项目,而且项目并无启用可空引用类型,下面是一段示例代码:excel
var workbook = ExcelHelper.LoadExcel(excelPath:null); if (workbook is null) { Console.WriteLine("workbook is null"); }
IWorkbook ExcelHelper.LoadExcel(string excelPath)
这个 API 的输入参数期待的是一个不可空引用类型,返回值是一个不为空的引用类型,虽然示例项目并无启用可空引用类型,VS 也是会给出一些提示的,提示以下:code
若是将一个 null
传递给一个是不可空引用类型的值会怎么样呢,这取决于实现代码的处理,在前面一篇文章我已经提到过了,指望输入值是不可空引用类型时,依然须要作必要的空检查,实际改造的时候我也是这么作的,若是不可空引用类型接收了一个 null
基本都会得到一个 ArgumentNullException
blog
上述代码执行结果输出以下:开发
从上面的示例能够看的出来,可空引用类型可以为咱们带来很大的便利,并且也能够增长程序的健壮性,经过 VS 的提示,启用可空类型能够将提示提高为 Warning 更好的提高代码可靠性,也能够减小不少没必要要的空检查,经过启用可空引用类型,也让我修复了一些本来代码中缺乏的检查,进一步加强了代码的健壮性。rem
示例代码能够从 https://github.com/WeihanLi/SamplesInPractice/blob/master/NPOISample/NPOIExtensionSample.cs 获取,能够自行测试get