天天看點

WeihanLi.Npoi 1.14.0 Release Notes

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 也是會給出一些提示的,提示如下:

WeihanLi.Npoi 1.14.0 Release Notes
WeihanLi.Npoi 1.14.0 Release Notes

如果将一個

null

傳遞給一個是不可空引用類型的值會怎麼樣呢,這取決于實作代碼的處理,在前面一篇文章我已經提到過了,期望輸入值是不可空引用類型時,依然需要做必要的空檢查,實際改造的時候我也是這麼做的,如果不可空引用類型接收了一個

null

基本都會獲得一個

ArgumentNullException

上述代碼執行結果輸出如下:

WeihanLi.Npoi 1.14.0 Release Notes

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

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。