Странное поведение Linq(Where) с Generic объектом в .Net Core
Доброй ночи, дорогие друзья! Метод:
public interface IQueuesForPrinting<T> where T : Book
{
public static List<T[]> GetQueues(List<T> workList)
{
List<T> uniqBooks = workList.Distinct().ToList(); //возвращает объекты с уникальными параметрами. Здесь переопределённый метод Equals работает как надо.
var queuesForPrinting = new List<T[]>();
foreach (var item in uniqCovers)
{
queuesForPrinting.Add(workList.Where(books => books.Equals(item)).ToArray()); //а здесь хоть переопределённый метод Equals и возвращает true (видно во время отладки), но всё же Where не возвращает объекты равные эталонному item.
}
return queuesForPrinting;
}
}
Притом, если отказаться от generic и вместо Т жёстко задать Cover, то всё отлично работает.
Пример одного из объектов:
public class Cover : Book, IEquatable<Cover>
{
public string Lamination { get; set; }
public bool Equals(Cover other)
{
if (other == null)
return false;
if (Lamination == other.Lamination
&& BookFormat == other.BookFormat
&& BookMount == other.BookMount
&& Imposition == other.Imposition)
return true;
return false;
}
public override int GetHashCode()
{
int hashBookFormat = BookFormat == null ? 0 : BookFormat.GetHashCode();
int hashBookMount = BookMount == null ? 0 : BookMount.GetHashCode();
int hashImposition = Imposition.GetHashCode();
return (hashBookFormat ^ hashBookMount) ^ hashImposition;
}
public override string ToString()
{
return Name;
}
}
Что я делаю не так? Спасибо.