Elenco < TEntity > .Cast < BusinessObject > () non riesce quando esiste un cast implicito

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

  •  05-07-2019
  •  | 
  •  

Domanda

Ricevo una InvalidCastException che converte un elenco di entità linq in un elenco businessobject usando .Cast < > operatore. " Impossibile trasmettere l'oggetto di tipo "Ticketing.ticket" da digitare . 'Ticketing.ModelTicket' " (il nome dello spazio dei nomi è stato modificato perché la sottolineatura causava una formattazione non necessaria)

ecco la mia classe di oggetti business

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

ed ecco il mio metodo di estensione per convertire un elenco di oggetti linq in un elenco di oggetti business:

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

Soluzione

Vorrei andare con la seguente funzione:

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

Se non funziona per te, puoi seguire il percorso completamente diretto:

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

Direi che il secondo è discutibile più chiaramente su ciò che sta accadendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top