Странное поведение 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;
    }
}

Что я делаю не так? Спасибо.


Ответы (0 шт):