Resharper NotNull 属性是否适用于扩展方法?

Do Resharper NotNull attributes work on Extension Methods?

我们正在使用扩展方法,例如 return 如果列表为 null,则为空列表以稍微清理代码。下面包含一个简化示例。

不幸的是,该方法仍然触发来自 Resharper 的警告。在大多数情况下使用 NotNull 属性都有效,但在将该方法用作扩展方法时无效。

我附上了一张显示波浪线的屏幕截图。注意蓝色波浪线。请注意 NotNull 属性如何在方法未作为扩展方法调用时执行它应该执行的操作,但在以这种方式使用时却不会执行。显然我们希望能够将该方法作为扩展方法来调用。

这不可能吗?我们可以使用其他属性吗?

(绿色波浪线表示我们可以将该方法作为扩展方法调用这一事实。)

这是因为您使用了 ? (null-conditional) operator,它不会链接 - 如果输入为空,它将使语句短路。因此,如果输入为 null,list 将评估为 null,并且 list.Count 将抛出 nullreference-exception。

您可以将整个内容括在括号中,例如

var list = (input?.List).EmptyIfNull();