承上文 在 C# 中 Nullable Reference Types 使用屬性NotNullWhen
我們繼續探討...
假設一個例子
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);
}
編譯器將對上面的程式碼發出警告:
警告訊息如下:
警告 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