为了在一些LINQ To SQL对象和DTO之间进行转换,我们在DTO上创建了显式cast操作符。这样我们就可以做到以下几点:
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()扩展方法,当您将基类型之类的东西强制转换为派生类型时,它工作得很好,但当对象具有显式强制转换操作符时,它就会失败。
https://stackoverflow.com/questions/2819473
复制相似问题