承上文 在 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);}
编译器将对上面的程式码发出警告:
警告讯息如下:
警告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