У меня есть странная проблема.Метод «Содержит» возвращает false
У меня есть EntityCollection<T>
, который содержит элемент, но метод Содержит возвращает false.
Я превысил метод «Равно» T, но метод «Содержит» не вызывает его (хотя это сказано в документации).
Когда я делаю 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 });
}
это сработало один раз, но остановился, когда я начал использовать ФОС, я удивляюсь, как это содержит метод работает .. ...
Вы также переопределили метод 'GetHashCode()'? – adrianbanks
Да, у меня есть, thx – kra
Вы также можете добавить код переопределения 'GetHashCode'.' Equals' не будет запущен, если у него есть ошибка. –