我只是附上一张图片以供参考。我难住了。在调试器中,这些值绝对相等,但Find<T>
仍然返回 null 并且Exists<T>
仍然返回 false。供参考:UserRepository
实现IEnumerable<T>
where T
is DomainUser
。
问问题
2791 次
2 回答
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);
于 2013-07-10T15:06:06.373 回答
5
你有没有尝试过 :
u.Username.Equals(args.CommandArgument)
于 2013-07-10T15:05:49.150 回答