Tho*_*kow 5 c# resharper null annotations
我正在使用[NotNull]像这样的ReSharpers 注释:
public void MyMethod([NotNull] string a)
{
if(a == null) // Warning: Expression is always false.
{
throw new ArgumentNullException();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,由于有NotNull注释,ReSharper会警告我有关未使用的前提条件检查的信息,因为
表达总是假的
但是,据我了解,这些注释仅表示该参数永远不应为null;即,它们不禁止呼叫者通过null,例如
this.MyMethod(null);
Run Code Online (Sandbox Code Playgroud)
甚至不那么明显(更像真实代码)
string foo = null;
this.MyMethod(foo);
Run Code Online (Sandbox Code Playgroud)
因此,我认为包括对的前提条件检查确实是有道理的null,但是也许我错过了一个概念或对它的理解不正确。
为带[NotNull]注释的参数包括显式的可空性检查是否有意义?
我测试了这个,当你标记一个参数时,[NotNull]基本上告诉你这个参数不应该采用空字符串。传递空值时,您会收到来自 Resharper 的警告,告诉您“标有 [NotNull] 属性的实体可能存在空赋值。”,但您没有收到错误,因此程序可以编译。明智的做法是防止正在调用的方法中出现空值。