WeihanLi.Npoi 1.14.0 Release Notes

WeihanLi發表於2021-01-21

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

相關文章