MemberNotNullAttribute 是 .NET 5 的新增特性,位於System.Diagnostics.CodeAnalysis。該特性用於顯式聲明,調用此方法後該值再也不爲 Null。
示例以下,建立一個 csproj,啓用 C# 8.0 的空引用類型新特性。api
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <Nullable>enable</Nullable> <WarningsAsErrors>$(WarningsAsErrors);CS8600;CS8602;CS8603;CS8618;CS8625</WarningsAsErrors> </PropertyGroup> </Project>
以下圖所示,因爲編譯器沒法保證 _mayNullStr.Length 不會引起空引用異常,因此拋出編譯錯誤 CS8602;spa
此時能夠經過添加 MemberNotNull 特性,顯式地告訴編譯器方法 PromisStrNotNull() 能夠保證 _mayNullStr 不爲 Null。code
此外他還有一個姊妹 MemberNotNullWhenAttributeblog
/// <summary> /// 返回 true 時,<see cref="_mayNullStr"/> 不爲 null /// </summary> /// <returns></returns> [MemberNotNullWhen(true, nameof(_mayNullStr))] private bool StrNotNullWhenReturnTrue() { if (DateTime.Now.DayOfWeek == DayOfWeek.Friday) { _mayNullStr = "明天不用上班啦!"; return true; } _mayNullStr = null; return false; }