【发布时间】:2010-05-12 13:59:53
【问题描述】:
为了在某些 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() 扩展方法,当您将基本类型之类的东西强制转换为派生类型时,它可以正常工作,但是当对象具有显式强制转换运算符时会失败。
【问题讨论】:
标签: c# linq casting extension-methods