在 C# 中 Nullable Reference Types 使用属性MemberNotNull

承上文 在 C# 中 Nullable Reference Types 使用属性NotNullIfNotNull

我们继续探讨...


使用属性 MemberNotNull

假设一个例子

class Person{  private string _name;  public Person()  {    SetDefaultName();  }  private void SetDefaultName()  {    _name = "Bob";  }}

这段程式码定义了一个名为 Person 的类别,里面有一个私有栏位叫做 _name,以及一个私有函式叫做 SetDefaultName
类别里还有一个无参数的建构子,里面呼叫了 SetDefaultName 函式。
SetDefaultName 函式将 _name 这个栏位初始化为 "Bob"。

编译器将对上面的程式码发出警告:
http://img2.58codes.com/2024/20152569ns8HhbcsaZ.jpg

警告讯息如下:

警告CS8618退出建构函式时,不可为 Null 的 栏位 '_name' 必须包含非 Null 值。请考虑将 栏位 宣告为可为 Null。

我们可以考虑把宣告栏位_name改为可空'?',但是,明明建构子内就有呼叫 SetDefaultName 函式来初始化类_name栏位,这意味着编译器的讯息是错误的。

所以在这种情况下,与其把宣告栏位 _name 改为可空 '?',但你并不希望该栏位可空,更适合的作法应该是加入属性 MemberNotNull 来解决这个问题:

[MemberNotNull(nameof(_name))]private void SetDefaultName()

这是什麽意思呢?

[MemberNotNull(nameof(_name))] 属性是给编译器使用的,主要是让编译器更了解代码的逻辑。
如果你使用了 [MemberNotNull(nameof(_name))] 属性,
那么编译器就会知道在 SetDefaultName 方法中初始化的 _name 将不会是 null,因此它将不再发出警告。

了解更多:MemberNotNullAttribute Class


下一篇
在 C# 中 Nullable Reference Types 使用属性MemberNotNullWhen


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章