奇妙な問題があります。
要素を含むものがあります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}
私が実際に使いたいコードは
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 });
}
これは一度機能しましたが、wcf を使い始めたときに停止しました。