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

Visual Studio 2022中为何dbUser != null无效,is not null可正常判断?

问题原因分析

你遇到的情况核心原因是**!=运算符被重载且实现错误**,而is not null是C#原生的模式匹配空值检查,不受重载运算符影响。

具体细节:

  • 当databaseUsers.FirstOrDefault(...)找不到匹配项时,返回的是KeyValuePair<string, User>的默认值(因为KeyValuePair是值类型,无法为null),其Value属性对应User类型的默认值——如果User是引用类型,这个值就是null。
  • 若你的User类重载了!=运算符,但重载逻辑未正确处理null场景(比如遗漏null引用检查、比较逻辑错误),就会导致dbUser != null的判断结果与实际情况不符(明明dbUser是null,却返回true)。
  • 而dbUser is not null是C#语言层面的原生空值判断,它直接检查对象引用是否为null,不会调用重载的!=运算符,因此能得到正确结果。

另外,你的代码存在效率问题:FirstOrDefault会遍历整个集合(O(n)复杂度),而SortedDictionary本身支持键的快速查找,推荐改用TryGetValue方法,既高效又能规避默认KeyValuePair的潜在问题:

if (databaseUsers.TryGetValue(user.ObjectGuid, out var dbUser))
{
    // 找到用户的处理逻辑
}
else
{
    // 用户不存在的处理逻辑
}

内容的提问来源于stack exchange,提问作者Imran Yaseen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:15:49