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

StackOverflow https://stackoverflow.com/questions/1400459

  •  05-07-2019
  •  | 
  •  

Вопрос

Я получаю InvalidCastException, преобразующий список объектов linq в список бизнес-объектов с помощью оператора .Cast<>.«Невозможно поднять объект типа« билет ».ticket 'type' 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
    }
}
Это было полезно?

Решение

Я бы использовал следующую функцию:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top