in

dotNet Umbria [DNU]

Il primo User Group in Umbria sul mondo .Net
Latest post 03-04-2008 6:28 PM by belius. 3 replies.
Page 1 of 1 (4 items)
Sort Posts: Previous Next
  • 03-03-2008 12:58 AM

    Cast tra oggetti custom

     Scusate la niubbata...

     Ho un oggetto ListArticolo che eredita da un List<Articolo>.

    Ora vorrei fare una cosa del genere:

     List<Articolo> lista=listacompleta.FindAll(predicate...)

    ListArticolo prova=(ListArticolo) lista;

    Il cast non è possibile perchè ricevo l'errore "Impossibile castare l'oggetto List<Articolo> in ListArticolo" e devo quindi fare così:

     List<Articolo> lista=listacompleta.FindAll(predicate...)

    ListArticolo result=new ListArticolo(); 

     foreach (Articolo articolo in lista)
              result.add(articolo);

     

    E' l'unico modo o sto prendendo una cantonata???

    Grazie!

    Daniele 

  • 03-03-2008 4:57 AM In reply to

    Re: Cast tra oggetti custom

    Il metodo FindAll ti ritorna una List<ListArticolo>, quindi non devi fare nessun foreach ed ovviamente il cast a ListArticolo fallisce.

    se la tua variabile result è di tipo List<ListArticolo> il tutto si riduce a

    result = listacompleta.FindAll(predicate .... );

  • 03-03-2008 9:17 AM In reply to

    Re: Cast tra oggetti custom

    scusate ma non mi sono spiegato bene...

    ListArticoli è così definito:

        public class ListArticoli:List<Articolo>
        {...

    e la mia domanda è: C'è un modo per castare direttamente  List<Articolo> a ListArticoli?

    Grazie!

    Daniele 

  • 03-04-2008 6:28 PM In reply to

    • belius
    • Top 10 Contributor
    • Joined on 11-16-2007
    • Perugia

    Re: Cast tra oggetti custom

    Ciao,

    se proprio hai questa esigenza (poi casomai mi spieghi a cosa ti serve Smile) potresti creare un costruttore che si smazza lui il lavoro:

     

    public class ListArticoli:List<Articolo>
    {

    public ListArticoli(List<Articoli> list)
    {

    foreach .....
    }

    }

     

    il discorso da fare comunque è che ereditando da List<T> erediti anche i suoi metodi quindi se fai una cosa del genere:

    ListArticoli list = new ListArticoli();
    ....
    list.FindAll(predicate....);

    vedrai che ti ritorna una List<Articoli> quindi ti resta il problema.

    Se proprio hai l'esigenza di una "tua collezione" ti consiglio a questo punto di utilizzare System.Collections.ObjectModel.Collection<T>

     

    Ciao

    Simone Belia Blog: Belius
Page 1 of 1 (4 items)
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems