【发布时间】:2011-06-09 23:47:33
【问题描述】:
我遇到了一些奇怪的问题。
我有一个 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 时就停止了,我想知道这个 contains 方法是如何工作的.....
【问题讨论】:
-
你是否也重写了
GetHashCode()方法? -
也发布您的
GetHashCode覆盖代码 - 如果有错误,Equals将不会运行。
标签: c# asp.net equals contains entitycollection