2013-07-10 21 views
6

私はちょうど参考にこれを参照するために画像を添付します。私は困惑している。デバッガでは、値は互いに正確に等しくなりますが、Find<T>はまだnullを返しており、Exists<T>はまだfalseを返しています。参考:UserRepositoryIEnumerable<T>を実装しており、TDomainUserです。List.Find ()は、述語が一致してもnullを返します。

Debug screencap

+0

は、バイト配列に変換すると、バイトコードをチェックしてみます。私はそれらの1つが付加された '0'バイトを持っていると思います。 – Alex

答えて

14

を問題はCommandArgumentの種類がobjectであるということですので、それが基準IDチェックを行っています。 (私はこれがあなたのコンパイル時の警告を与えていない驚いている。)

あなたはstringCommandArgumentをキャスト、またはEqualsを使用することができ、次のいずれか

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

または

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

(この方法で静的Equalsメソッドを使用すると、u.Username.Equals(args.CommandArgument)とは異なり、nullのユーザー名でも機能します。

でも、私はリストにシーケンスを変換しません - 私はちょうど代わりにLINQを使用したい:

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

「ToList」を呼び出さずに 'FirstOrDefault'を使用できることを指摘してくれてありがとう。私は、 'RepeaterCommandEventArgs'ではなく' Control'( 'String')で' CommandArgument'の型だけを見ていたと思います。 – tuespetre

5

あなたは試してみました:

u.Username.Equals(args.CommandArgument) 
関連する問題