| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  10-11-2009, 16:41 | #1 | 
| Senior Member Iscritto dal: Sep 2004 
					Messaggi: 3967
				 | 
				
				[C# 2.0]Come passo dinamicamente un <T> ?
			 
		Ciao a tutti   Mi sto scervellando per una cosa che forse è una stupidaggine; supponendo di avere un metodo: Codice: 
public IList GetAll<T>()
{
    IList lista = manager.Prendi(typeof(T)).List();
    return lista;
}Codice: private Pennello pennello; private Vernice vernice; etc.. GetAll<T>() dinamicamente uno di quegli oggetti ? 
				__________________ Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek   | 
|   |   | 
|  10-11-2009, 17:54 | #2 | 
| Member Iscritto dal: Jul 2008 
					Messaggi: 237
				 | 
		Quello che hai scritto è a dir poco confuso, comunque ogni genere di funzione "dinamica" in C# richiede l'uso di reflection nonostante i metodi generici. Polimorfismo e uso dinamico sono cose molto diverse... Ad ogni modo se vuoi aiuto prima cura meglio la formulazione del problema e rendila intelligibile ed univocamente interpretabile (la cosa ti aiuterà anche a chiarire cosa stai facendo, non solo a spiegarlo al mondo). Edit: se lo scopo è chiamare GetAll su pennello, vernice etc, il modo più comodo sarebbe far derivare quelli da un'interfaccia comune ed in runtime usare la reflection per ottenere i valori dei fields con tipi che derivano dalla tua interfaccia. Non sono tuttavia sicuro che quel che ho ipotizzato che tu voglia fare sia quel che vuoi realmente fare. Ultima modifica di !k-0t1c! : 10-11-2009 alle 17:59. | 
|   |   | 
|  10-11-2009, 19:22 | #3 | |
| Senior Member Iscritto dal: May 2004 Città: Londra (Torino) 
					Messaggi: 3692
				 | 
		!k-0t1c!, penso che l'eventuale parte in reflection sia gia' stata fatta nella manager.Prendi, quindi il problema dovrebbe essere piu' semplice. Supponendo che appunto la manager.Prendi(typeof(Panino)).List() ritorni una lista di Panini ma semplicmente non lo sappia (Ovvero ritorni una IList generica), allora farei Codice: 
public IEnumerable<T> GetAll<T>()
{
    foreach(T t in manager.Prendi(typeof(T)).List())
    {
         yield return t;
    }
}Quote: 
 Codice: ... List<Pennello> pennelli = new List<Pennello>(istanza.GetAll<Pennello>()); ... Codice: ... var pennelli = istanza.GetAll<Pennello>().ToList(); 
				__________________ Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. | |
|   |   | 
|  11-11-2009, 13:55 | #4 | 
| Senior Member Iscritto dal: Sep 2004 
					Messaggi: 3967
				 | 
		
Chiedo venia. @gugoXX Si, la parte di reflection infatti è già implementata (certe volte mi fai paura). Con IEnumerable in effetti risolverei il problema   Grazie del prezioso suggerimento. RaouL. 
				__________________ Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek   Ultima modifica di RaouL_BennetH : 11-11-2009 alle 13:59. | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 10:29.









 
		 
		 
		 
		








 
  
 



 
                        
                        










