2013-07-10 6 views
6

Ich werde nur ein Bild als Referenz auf diesem einhängen. Ich bin ratlos. Im Debugger stimmen die Werte definitiv überein, aber Find<T> gibt immer noch null zurück, und Exists<T> gibt immer noch false zurück. Als Referenz: UserRepository implementiert IEnumerable<T> wobei TDomainUser ist.List.Find <T>() gibt NULL zurück, obwohl Prädikat

Debug screencap

+0

Versuchen Sie, einen Byte-Array konvertieren und den Byte-Codes zu überprüfen. Ich vermute, einer von ihnen hat ein angehängtes '0' Byte. – Alex

Antwort

14

Das Problem ist, dass die Art der CommandArgument ist object, so ist es eine Referenz Identitätsprüfung durchgeführt wird. (Ich bin überrascht dies nicht, dir gibt einen Compiler-Warnung.)

Sie entweder CommandArgument zu string werfen könnte, oder Equals verwenden:

u => u.Username == (string) args.CommandArgument 

oder

u => Equals(u.Username, args.CommandArgument) 

(Mit der statischen Methode Equals bedeutet dies, dass es auch für Benutzer mit einem null Benutzernamen funktioniert, im Gegensatz zu u.Username.Equals(args.CommandArgument).)

Ich würde die Sequenz auf eine Liste, wenn auch nicht konvertieren - ich würde LINQ nur statt:

DomainUser toRemove = 
    repo.FirstOrDefault(u => u.Username == (string) args.CommandArgument); 
+0

Danke für den Hinweis, dass ich 'FirstOrDefault' verwenden kann, ohne' ToList' aufzurufen. Ich denke, ich habe mir nur den Typ von 'CommandArgument' im' Control' (es ist 'String') angesehen und nicht den' RepeaterCommandEventArgs'. – tuespetre

5

Haben Sie versucht:

u.Username.Equals(args.CommandArgument)