Сбой метода расширения LINQ .Cast (), но (тип) объект работает

Для преобразования между некоторыми объектами LINQ to SQL и DTO мы создали явные операторы приведения в DTO. Таким образом, мы можем сделать следующее:

DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj;

Это хорошо работает.

Однако, когда вы пытаетесь выполнить приведение с использованием метода расширения LINQ .Cast (), оно выдает недопустимое исключение приведения, говоря, что не может привести тип Linq2SQLType к типу DTOType. то есть ниже не работает

List<DTO.Name> Names = dbContact.tNames.Cast<DTO.Name>()
                                               .ToList();

Но ниже работает отлично:

DAL.tName MyDalName = new DAL.tName();
DTO.Name MyDTOName = (DTO.Name)MyDalName;

и ниже тоже отлично работает

List<DTO.Name> Names = dbContact.tNames.Select(name => (DTO.Name)name)
                                               .ToList();

Почему метод расширения .Cast () генерирует недопустимое исключение приведения? Я использовал метод расширения .Cast () таким образом много раз в прошлом, и когда вы приводите что-то вроде базового типа к производному типу, он работает нормально, но падает, когда объект имеет явный оператор приведения.

Ответы на вопрос(1)

Ваш ответ на вопрос