リストの等価性のチェックに問題があるようです。私の場合、2つのロールオブジェクトがあり、それらが等しいかどうかを確認したいのです。各ロールには、名前と権限のリストが含まれています。各パーミッションには名前だけが含まれています。C#でのリストの等価性のチェックNhibernateを使用しているときに.Netが動作しない
public class Role : BaseDomain
{
virtual public String Name { get; set; }
virtual public IList Permissions { get; set; }
}
public class Permission
{
virtual public String Name { get; set; }
}
私は、RoleオブジェクトとPermissionオブジェクトの両方でequalsメソッドを定義しました。これらのオブジェクトは、Nhibernateを使用してデータベースからロードされます。つまり、ロールには、IListインターフェイスを実装するNHibernate.Collection.PersistentBag型のオブジェクトにすべてのアクセス許可が実際に含まれています。
if (!IList.Equals(Permissions, otherObj.Permissions)) return false;
これは常にfalseを返している次のように私は条件を持っている役割クラスのequalsメソッドで
。リスト内のパーミッションに同じ名前のオブジェクトが同じ順序で含まれている場合でも。これは、Permissionオブジェクトに対してequalsメソッドを実装していないと意味がありますが、私は持っています。
私はこのような文を実行します。
role1.equals(role2);
何が起こるかというと、それは最初のRoleオブジェクトのequalsメソッドに行くということです。良い。 equalsメソッドは、ロールの名前が等しいかどうかをチェックします。彼らです。次に、上記のコードを使用して権限が等しいかどうかを確認します。
私は、PermissionクラスのequalsメソッドとGetHashCodeメソッドにブレークポイントを持っています。そのステートメントが実行されると、権限クラスのequalsメソッドもGetHashCodeメソッドも呼び出されませんが、常にfalseが返されます。実際には、2つのリストが等しくないと判断するために何が起こるか把握することはできません。何が実行されますか?私はそのコード行に入ることさえできません。
これはうまくいくはずですが、そうではありません。誰でも何が起こっているかについてのアイデアはありますか?
しかし、これは単純にIList.Equals(obj1、obj2)メソッドを使用していないことを意味します。このメソッドは、obj1 == obj2!と同じです。追加のメリットがない場合でもIListインターフェイスでこのメソッドを定義するのはなぜですか?私が紛失している2つの違いはありますか? –
IListインターフェイスでは、Equalsメソッドが定義されていません。 しかし、ListクラスにはEqualsメソッドがありますが、これは.NETのすべてのクラスが 'Object'から継承し、Equalsメソッドが 'Object'クラスで定義されているためです。 参照:http://msdn.microsoft.com/en-us/library/system.object.aspx –