c# - List.Find<T>() 即使谓词匹配也返回 null

标签 c# .net

我只附上一张图片以供引用。我很难过。在调试器中,这些值肯定彼此相等,但是 Find<T>仍然返回 null 和 Exists<T>仍然返回错误。供引用:UserRepository工具 IEnumerable<T>其中 TDomainUser .

Debug screencap

最佳答案

问题在于 CommandArgument 的类型是 object,因此它正在执行引用身份检查。 (我很惊讶这没有给你一个编译时警告。)

您可以将 CommandArgument 转换为 string,或者使用 Equals:

u => u.Username == (string) args.CommandArgument

u => Equals(u.Username, args.CommandArgument)

(与 u.Username.Equals(args.命令参数).)

虽然我不会将序列转换为列表 - 我只是使用 LINQ 代替:

DomainUser toRemove =
    repo.FirstOrDefault(u => u.Username == (string) args.CommandArgument);

关于c# - List.Find<T>() 即使谓词匹配也返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574126/

相关文章:

c# - Monodevelop C#脚本执行bug

c# - 如何从 WPF 中的基类型集合中为子类型集合自动生成 DataGrid 列?

c# - 将方法从 Java 转换为 C#

c# - Silverlight 中的对象深拷贝

c# - 为 iexpress 创建批处理文件

c# - 构建定义的配置值更新最佳实践

c# - Newtonsoft JSON- 与 DataSet 之间的转换会导致 Decimal 变为 Double?

javascript - 如何从 CMD 命令行启动 Node.js 应用程序,并从另一个 .Net core 3.0 应用程序调用它?

.net - Qt 作为真正的多平台开发环境

ASP.NET - 服务器控制输出缓存