List<TEntity>.Cast<BusinessObject>() завершается с ошибкой, если существует неявное приведение
-
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));
}
}
Я бы сказал, что второе, пожалуй, более ясно отражает то, что именно происходит.
Не связан с StackOverflow