週末更新了一下項目,開始使用可空引用類型,而且移除了 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