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();
我们正在使用扩展方法,例如 return 如果列表为 null,则为空列表以稍微清理代码。下面包含一个简化示例。
不幸的是,该方法仍然触发来自 Resharper 的警告。在大多数情况下使用 NotNull 属性都有效,但在将该方法用作扩展方法时无效。
我附上了一张显示波浪线的屏幕截图。注意蓝色波浪线。请注意 NotNull 属性如何在方法未作为扩展方法调用时执行它应该执行的操作,但在以这种方式使用时却不会执行。显然我们希望能够将该方法作为扩展方法来调用。
这不可能吗?我们可以使用其他属性吗?
(绿色波浪线表示我们可以将该方法作为扩展方法调用这一事实。)
这是因为您使用了 ? (null-conditional) operator,它不会链接 - 如果输入为空,它将使语句短路。因此,如果输入为 null,list 将评估为 null,并且 list.Count 将抛出 nullreference-exception。
您可以将整个内容括在括号中,例如
var list = (input?.List).EmptyIfNull();