为何引用类型会触发Resharper的“Expression is always true”警告?
问题解答
为什么Resharper提示“Expression is always true”
SignalR的IHubClients.User(string userId)方法设计上永远不会返回null,不管你传入的userId有没有对应的在线连接:
- 即使目标用户没有任何活跃连接,这个方法依然会返回一个有效的
IClientProxy实例。调用这个代理的方法(比如SendAsync)不会抛出异常,只是不会实际发送任何消息。 - Resharper通过分析SignalR的代码逻辑或官方的非空注解,识别到这个方法的返回值永远非空,因此判定
connection != null的条件恒成立,给出警告。
关于可空引用类型的警告
你尝试添加?标记IClientProxy? connection时出现的警告,是因为你的项目未启用nullable引用类型特性:
- 要使用可空引用类型注解,需要在项目文件中配置
<Nullable>enable</Nullable>,或者在代码文件顶部添加#nullable enable指令。 - 但实际上完全不需要给
connection加可空标记,因为User()确实不会返回null,直接去掉if (connection != null)的判断即可。
用var声明仍有警告的原因
不管是显式声明IClientProxy还是用var,Resharper都能识别到User()方法的返回值非空特性,所以警告不会消失——核心问题还是这个null检查本身就是多余的。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

