2013-07-10 6 views
6

Po prostu dołączam obrazek w celu odniesienia się do tego. Jestem zaskoczony. W debugerze wartości definiują się jednoznacznie, ale Find<T> wciąż zwraca wartość zerową, a Exists<T> nadal zwraca wartość false. Dla odniesienia: UserRepository implementuje IEnumerable<T> gdzie T jest DomainUser.List.Find <T>() Zwracanie wartości NULL, mimo że dopasowania predykatów

Debug screencap

+0

Spróbuj przekonwertować do tablicy bajtów i sprawdzenie bajt kodów. Zgaduję, że jeden z nich ma dołączony bajt "0". – Alex

Odpowiedz

14

Problem polega na tym, że typ CommandArgument jest object, więc to przeprowadza kontrolę tożsamości odniesienia. (Jestem zaskoczony, to nie daje ostrzeżenie podczas kompilacji.)

Można też rzucić CommandArgument do string lub użyj Equals:

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

lub

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

(Używanie metody statycznej Equals w ten sposób oznacza, że ​​będzie działać nawet dla użytkowników o nazwie użytkownika null, w przeciwieństwie do u.Username.Equals(args.CommandArgument).)

bym nie konwertować sekwencję do listy chociaż - ja po prostu użyć LINQ zamiast:

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

Dzięki za wskazanie, że mogę użyć 'FirstOrDefault' bez wywoływania' ToList'. Chyba spojrzałam tylko na typ 'CommandArgument' na' Control' (to 'String'), a nie na' RepeaterCommandEventArgs'. – tuespetre

5

Czy próbowałeś:

u.Username.Equals(args.CommandArgument) 
Powiązane problemy