我会在这里附上一张图片作为参考。我被难住了。在调试器中,这些值肯定是相等的,但是
Find<T>
仍然返回null,而Exists<T>
仍然返回false。供参考:UserRepository
实现了IEnumerable<T>
,其中T
是DomainUser
。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);
ToList
的情况下使用FirstOrDefault
。我想我只看了Control
上的CommandArgument
类型(它是String
),而没有看RepeaterCommandEventArgs
。 - tuespetre您尝试过以下方法吗:
u.Username.Equals(args.CommandArgument)