iT邦幫忙

0

在 C# 中 Nullable Reference Types 使用屬性NotNullIfNotNull

c#
  • 分享至 

  • xImage
  •  

承上文 在 C# 中 Nullable Reference Types 使用屬性NotNullWhen

我們繼續探討...

使用 NotNullIfNotNull

假設一個例子

public string? GetString(object? obj)
{
  return obj == null ? null : string.Empty;
}

GetString()這個方法的目的是為了讓回傳的NULL或空字串 取決於傳進來的參數obj
如果傳入的參數 obj 為 null,就會返回 null。
否則,會返回一個空字符串。

實際使用GetString():

public void Foo(object? obj)
{
  string str = string.Empty;

  if(obj != null)
    str = GetString(obj);
}

編譯器將對上面的程式碼發出警告:
https://ithelp.ithome.com.tw/upload/images/20230105/20152569FaP7igGls5.jpg

警告訊息如下:

警告	CS8600	正在將 Null 常值或可能的 Null 值轉換為不可為 Null 的型別。

在這種情況下,str的賦值是在if條件下保證obj不為null,但編譯器無法理解這個情況
為了幫助編譯器搞清楚狀況,讓我們對方法的回傳值加入屬性 NotNullIfNotNull 如下:

[return: NotNullIfNotNull("obj")]
public string? GetString(object? obj)

這是什麽意思呢?
意思是如果方法的某個參數不是 null,那麽返回值也不能是 null。

這裡,你可以看到 GetString 方法的返回值被標註為 [return: NotNullIfNotNull("obj")]
這意味著,如果呼叫 GetString() 時傳入的參數 obj 不是 null,那麽 GetString()的返回值也不能是 null。
如果你在實做方法的時候返回了 null,就會得到一個警告,提醒你這樣做是不合法的。
這個特性可以幫助你在撰寫程式碼的時候更加精確地控制回傳值的類型
從而更好地保證程式碼的品質。

了解更多:NotNullIfNotNullAttribute Class


下一篇

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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言