我只附上一张图片以供引用。我很难过。在调试器中,这些值肯定彼此相等,但是 Find<T>
仍然返回 null 和 Exists<T>
仍然返回错误。供引用:UserRepository
工具 IEnumerable<T>
其中 T
是DomainUser
.
最佳答案
问题在于 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/