WeihanLi.Npoi 1.14.0 Release Notes
Intro
周末更新了一下项目,开始使用可空引用类型,并且移除了 net45
的支持,仅支持 netstandard2.0
Changes
Remove net45
Support
基础库打算移除 net45
的支持,因为很多基础的API,在 netstandard2.0
中是有的,但是 net45
是没有的,比如 Array.Empty
/Task.CompletedResult
等,所以很多时候需要为 net45
专门写一些代码来实现类似的功能,而且随着 .NET Core 的开发者越来越多,.NET Core 越来越成熟,所以打算抛弃 net45
也可以使得维护更为方便和简单。
Nullable Reference
新版本完全启用了 Nullable Reference Types
可空引用类型,之所以启用可空引用类型,一来是希望能够为开发者们使用提供更好的体验,开发者在开发的时候,就可以知道自己用到的 API 输入参数是否允许为 null
,如果不允许为 null
开发者可以在调用 API 之前检查 null
,避免输入一个不期望的 null
,对于 API 的返回值也会更加清晰,可以清晰地了解一个 API 的返回值是否会为 null
,如果会为 null
则可能需要做空检查,如果不会为 null
就不需要做不必要的空检查了。
Sample
提供了一个示例项目,示例项目是 dotnet core 3.1 的项目,并且项目并没有启用可空引用类型,下面是一段示例代码:
var workbook = ExcelHelper.LoadExcel(excelPath:null);
if (workbook is null)
{
Console.WriteLine("workbook is null");
}
IWorkbook ExcelHelper.LoadExcel(string excelPath)
这个 API 的输入参数期待的是一个不可空引用类型,返回值是一个不为空的引用类型,虽然示例项目并没有启用可空引用类型,VS 也是会给出一些提示的,提示如下:
如果将一个 null
传递给一个是不可空引用类型的值会怎么样呢,这取决于实现代码的处理,在前面一篇文章我已经提到过了,期望输入值是不可空引用类型时,依然需要做必要的空检查,实际改造的时候我也是这么做的,如果不可空引用类型接收了一个 null
基本都会获得一个 ArgumentNullException
上述代码执行结果输出如下:
More
从上面的示例可以看的出来,可空引用类型能够为我们带来很大的便利,而且也可以增加程序的健壮性,通过 VS 的提示,启用可空类型可以将提示提升为 Warning 更好的提升代码可靠性,也可以减少很多不必要的空检查,通过启用可空引用类型,也让我修复了一些原本代码中缺少的检查,进一步增强了代码的健壮性。
示例代码可以从 https://github.com/WeihanLi/SamplesInPractice/blob/master/NPOISample/NPOIExtensionSample.cs 获取,可以自行测试
References
- https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references
- https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/upgrade-to-nullable-references
- https://docs.microsoft.com/en-us/dotnet/csharp/nullable-migration-strategies
- https://github.com/dotnet/aspnetcore/issues/5680
- https://github.com/WeihanLi/WeihanLi.Npoi/pull/98
- https://www.nuget.org/packages/WeihanLi.Npoi/1.14.0
- https://github.com/WeihanLi/SamplesInPractice/blob/master/NPOISample/NPOIExtensionSample.cs