2013-07-10 22 views
6

我只是附上一張圖片以供參考。我很難過。在調試器中,這些值絕對相等,但Find<T>仍然返回null,並且Exists<T>仍然返回false。供參考:UserRepository器具IEnumerable<T>其中TDomainUserList.Find <T>()即使謂詞匹配返回null

Debug screencap

+0

嘗試轉換爲字節數組和檢查字節碼。我猜他們中的一個有一個附加的'0'字節。 – Alex

回答

14

的問題是,CommandArgument類型是object,所以它的執行基準身份檢查。 (我很驚訝,這是不是給你一個編譯時警告。)

你既可以投CommandArgumentstring,或使用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); 
+0

感謝您指出我可以在不調用ToList的情況下使用'FirstOrDefault'。我想我只查看過'Control'(它是'String')而不是'RepeaterCommandEventArgs'的'CommandArgument'類型。 – tuespetre

5

你試過:

u.Username.Equals(args.CommandArgument)