2013-07-10 23 views
6

Tôi sẽ chỉ đính kèm một hình ảnh để tham khảo về điều này. Tôi đang bối rối. Trong trình gỡ rối, các giá trị chắc chắn bằng nhau, nhưng Find<T> vẫn trả về giá trị rỗng và Exists<T> vẫn trả về false. Để tham khảo: UserRepository thực hiện IEnumerable<T> trong đó TDomainUser.List.Find <T>() trả về null mặc dù vị từ khớp với

Debug screencap

+0

Thử chuyển đổi vào một mảng byte và kiểm tra các byte-mã. Tôi đoán một trong số họ có một byte '0' nối thêm. – Alex

Trả lời

14

Vấn đề là loại CommandArgumentobject, vì vậy nó thực hiện một kiểm tra danh tính tham khảo. (Tôi ngạc nhiên đây không phải là cho bạn một cảnh báo thời gian biên dịch.)

Bạn có thể một trong hai diễn viên CommandArgument để string, hoặc sử dụng Equals:

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

hoặc

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

(Sử dụng phương pháp tĩnh Equals theo cách này có nghĩa là phương thức này sẽ hoạt động ngay cả đối với người dùng có tên người dùng null, không giống như u.Username.Equals(args.CommandArgument).)

tôi sẽ không chuyển đổi các chuỗi vào một danh sách mặc dù - Tôi chỉ muốn sử dụng LINQ thay vì:

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

Cảm ơn bạn đã chỉ ra rằng tôi có thể sử dụng 'FirstOrDefault' mà không cần gọi' ToList'. Tôi đoán tôi đã chỉ nhìn vào loại 'CommandArgument' trên' Control' (nó là 'String') và không phải là' RepeaterCommandEventArgs'. – tuespetre

5

Các bạn đã thử:

u.Username.Equals(args.CommandArgument) 
Các vấn đề liên quan