6

我只是附上一张图片以供参考。我难住了。在调试器中,这些值绝对相等,但Find<T>仍然返回 null 并且Exists<T>仍然返回 false。供参考:UserRepository实现IEnumerable<T>where Tis DomainUser

调试屏幕截图

4

2 回答 2

13

问题是 的类型CommandArgumentobject,所以它正在执行参考身份检查。(我很惊讶这没有给你一个编译时警告。)

您可以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 回答