List.Find <T>()即使谓词匹配也返回null

tue*_*tre 6 .net c#

我只是附上一张图片作为参考.我很难过.在调试器中,值肯定彼此相等,但Find<T>仍然返回null并Exists<T>仍然返回false.供参考:UserRepository实现IEnumerable<T>,其中TDomainUser.

调试screencap

Jon*_*eet 13

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

您可以强制CommandArgument转换string或使用Equals:

u => u.Username == (string) args.CommandArgument
Run Code Online (Sandbox Code Playgroud)

要么

u => Equals(u.Username, args.CommandArgument)
Run Code Online (Sandbox Code Playgroud)

(使用静态Equals方法这种方式意味着它甚至可以用于具有null用户名的用户,与之不同u.Username.Equals(args.CommandArgument).)

我不会将序列转换为列表 - 我只是使用LINQ代替:

DomainUser toRemove =
    repo.FirstOrDefault(u => u.Username == (string) args.CommandArgument);
Run Code Online (Sandbox Code Playgroud)


bpo*_*ter 5

你有没有尝试过 :

u.Username.Equals(args.CommandArgument)
Run Code Online (Sandbox Code Playgroud)