6

これについては参考までに画像を添付しておきます。私は困惑しています。デバッガーでは、値は互いに確実に等しくなりますが、Find<T>まだ null を返し、Exists<T>まだ false を返しています。参考までに: where is をUserRepository実装します。IEnumerable<T>TDomainUser

スクリーンキャプチャをデバッグ

4

2 に答える 2

13

問題は、の型がCommandArgumentisobjectであるため、参照同一性チェックを実行していることです。(これがコンパイル時の警告を出していないことに驚いています。)

にキャストCommandArgumentするかstring、次を使用でき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);
于 2013-07-10T15:06:06.373 に答える
5

やってみました :

u.Username.Equals(args.CommandArgument)
于 2013-07-10T15:05:49.150 に答える