2009-09-09 16 views
1

使用.Cast <>运算符,我得到一个InvalidCastException,将linq实体列表转换为businessobject列表。 “无法投射类型为'Ticketing.ticket'的对象以键入 'Ticketing.ModelTicket'。” (命名空间名称已更改,因为下划线是造成不必要的格式)列表<TEntity>。当隐式转换存在时,<BusinessObject>()失败

,这里是我的业务对象类

public sealed class ModelTicket 
{ 
public ModelTicket(ticket ticket) 
    { 
     _Ticket = ticket; 
    } 
public static implicit operator ModelTicket(ticket item) 
    { 
     return new ModelTicket(item); 
    } 
} 

,这里是我的扩展方法LINQ对象的列表转换为业务对象的列表:

public static class ModelTicketExtensions 
{ 
    public static List<ModelTicket> ToModelTickets(this List<ticket> list) 
    { 
     return list.Cast<ModelTicket>().ToList();// exception on cast 
    } 
} 
+0

Duplicate:http://stackoverflow.com/questions/808725/why-does-a-linq-castt-operation-fail-when-i-have-an-implicit-cast-defined – Wilka 2009-09-09 16:17:09

+0

@Wilka:嗯不是当然我是如何错过的。 – Maslow 2009-09-09 18:49:43

回答

1

我会去用下面的函数:

public static class ModelTicketExtensions 
{ 
    public static List<ModelTicket> ToModelTickets(this List<ticket> list) 
    { 
     return list.ConvertAll<ModelTicket>(t => (ModelTicket)t); 
    } 
} 

如果不为你工作,那么你可以去完全直接路线:

public static class ModelTicketExtensions 
{ 
    public static List<ModelTicket> ToModelTickets(this List<ticket> list) 
    { 
     return list.ConvertAll<ModelTicket>(t => new ModelTicket(t)); 
    } 
} 

我想说的第二个值得商榷的上到底发生了什么更加清晰。

+0

是的,我发现了ConvertAll并与第2号结束了,谢谢。 – Maslow 2009-09-09 18:35:29

相关问题