List‹TEntity›.Cast‹BusinessObject›() завершается ошибкой, когда существует неявное приведение

Я получаю исключение InvalidCastException, преобразующее список сущностей linq в список бизнес-объектов с помощью оператора .Cast‹>. «Невозможно преобразовать объект типа «Ticketing.ticket» в тип «Ticketing.ModelTicket». (имя пространства имен было изменено, поскольку подчеркивание вызывало ненужное форматирование)

вот мой класс бизнес-объектов

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
    }
}

person Maslow    schedule 09.09.2009    source источник
comment
Дубликат: stackoverflow.com/questions/808725/   -  person Wilka    schedule 09.09.2009
comment
@Wilka: хм, не знаю, как я это пропустил.   -  person Maslow    schedule 09.09.2009


Ответы (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));
    }
}

Я бы сказал, что второе, возможно, более ясно показывает, что именно происходит.

person Adam Robinson    schedule 09.09.2009
comment
да, я нашел ConvertAll и выбрал номер 2, спасибо. - person Maslow; 09.09.2009