You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何引用类型会触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:47:20