私はいくつかの奇妙な問題があります。'Contains'メソッドはfalseを返します
私はEntityCollection<T>
に要素が含まれていますが、Containsメソッドはfalseを返します。
私はTの 'Equals'メソッドをオーバーライドしましたが、 'Contains'メソッドはそれを呼び出すことはありません。
foreach (T x in coll)
を実行すると、x.Equals(element)
がtrueを返します。
ありがとうございました。
コード:
contains(object entCol, object val)
{
var coll = (ICollection<GraphicSockets>)entCol;
var socket = val as GraphicSockets;
foreach (GraphicSockets sock in coll)
socket.Equals(sock); //true for first element, GraphicSocket's Equals function called
coll.Contains(socket);//false, Equals function not called}
私は、WCFを使用し始めたとき、私が実際に使用したいコードが
private static bool contains(object entCol, object val)
{
Type entColType = typeof(EntityCollection<>).MakeGenericType(val.GetType());
MethodInfo contains = entColType.GetMethod("Contains");
return (bool)contains.Invoke(entCol, new object[] { val });
}
これはかつて働いていたが、停止され、私はこのメソッドの動作が含まか疑問.. ...
'GetHashCode()'メソッドもオーバーライドしましたか? – adrianbanks
はい、持っています – kra
あなたの 'GetHashCode'オーバーライドコードも投稿してください - バグがある場合、' Equals'は実行されません。 –