List.Find <t>()返回null,即使谓词匹配</t>

时间:2013-07-10 15:02:07

标签: c# .net

我只是附上一张图片以供参考。我很难过。在调试器中,值绝对相等,但Find<T>仍然返回null,Exists<T>仍然返回false。供参考:UserRepository实施IEnumerable<T> TDomainUser

Debug screencap

2 个答案:

答案 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)