LINQ .Cast () - Erweiterungsmethode schlägt fehl, aber (Typ-) Objekt funktioniert

Um zwischen einigen LINQ to SQL-Objekten und DTOs zu konvertieren, haben wir explizite Umwandlungsoperatoren für die DTOs erstellt. Auf diese Weise können wir Folgendes tun:

DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj;

Das funktioniert gut.

Wenn Sie jedoch versuchen, mit der Erweiterungsmethode LINQ .Cast () zu konvertieren, wird eine ungültige Konvertierungsausnahme ausgegeben, die besagt, dass der Typ Linq2SQLType nicht in den Typ DTOType konvertiert werden kann. das untenstehende funktioniert nicht

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

Aber das unten funktioniert gut:

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

und das unten funktioniert auch gut

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

Warum löst die Erweiterungsmethode .Cast () eine ungültige Besetzungsausnahme aus? Ich habe die .Cast () -Erweiterungsmethode in der Vergangenheit oft auf diese Weise verwendet, und wenn Sie so etwas wie einen Basistyp in einen abgeleiteten Typ umwandeln, funktioniert dies einwandfrei, stürzt jedoch ab, wenn das Objekt einen expliziten Umwandlungsoperator hat.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage