我只是附上一张图片以供参考。我很难过。在调试器中,值绝对相等,但Find<T>
仍然返回null,Exists<T>
仍然返回false。供参考:UserRepository
实施IEnumerable<T>
T
为DomainUser
。
答案 0 :(得分:13)
问题是CommandArgument
的类型是object
,因此它正在执行引用标识检查。 (我很惊讶这不会给你一个编译时警告。)
您可以将CommandArgument
投射到string
,或使用Equals
:
u => u.Username == (string) args.CommandArgument
或
u => Equals(u.Username, args.CommandArgument)
(使用静态Equals
方法,这意味着即使对于使用null
用户名的用户,它也会有效,与u.Username.Equals(args.CommandArgument)
不同。)
我不会将序列转换为列表 - 我只是使用LINQ:
DomainUser toRemove =
repo.FirstOrDefault(u => u.Username == (string) args.CommandArgument);
答案 1 :(得分:5)
你试过了吗?
u.Username.Equals(args.CommandArgument)