Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - ritorno tipo generico
Forum - C# / VB.NET - ritorno tipo generico - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2131
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:01
Lunedì, 29/11/2021
perfetto. ottimo carlo grazie :k:
piccola svista che non avevo notato.

Non ho ottenuto quello che realmente volevo, ma penso possa andar bene.

quello che volevo realmente (Forse mi sbaglio a spiegare o ad intepretare il codice)

non era avere un risultato finale come questo:

Codice sorgente - presumibilmente C# / VB.NET

  1. p = new PacketData();
  2.                     p.Command = (uint)Packet.HeaderCommand.ACT_GET_CHAR;
  3.                     p.Argument1 = accountID.ToString(); //ID Account                  
  4.                     p.Argument2 = t[0]; //ID del Chara
  5.  
  6.                     CharPaket c = (CharPaket)client.SendGetPacket<PacketData>(p);



Ma una funzione che determinava in modo automatico il tipo da restituire.
esempio

Codice sorgente - presumibilmente Plain Text

  1. CharPaket c = (CharPaket)client.SendGetPacket<PacketData>(p); //Manuale
  2.  
  3. CharPaket c = client.SendGetPacket<PacketData>(p); //Auto



Non so se mi sono spiegato o sbaglio io a capire il reale comportanto di questa funzione.
Quello che voglio e ottenere un tipo di cui non viene forzato a diventare tale (T)ret;

Ma che viene ristituito direttamente come tipo dalla funzione.

Cerco di farti capire cosa intendo.

Se facciamo in questo modo:

Codice sorgente - presumibilmente C# / VB.NET

  1. string prova(int i )  { return i.ToString(); }
  2.  
  3.  
  4. string risultato = prova(10);



Come vedi, so che prova mi restiurà un valore di tipo string. perche la funzione è di tipo string

Quello che vorrei fare è una sorta di

T prova(int i);


ed avere esempio

Codice sorgente - presumibilmente C#

  1. int t = prova(10);
  2. string t = prova(10);
  3. float t = prova(10);
  4. bool t = prova(10);




Una sola funzione, ma che restituisce diversi tipi da quello normalmente passati come generici T
spero di essermi spiegato perchè faccio confusione anche da solo :rotfl:


Ultima modifica effettuata da Thejuster il 29/11/2021 alle 15:02


PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1030
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:13
Lunedì, 29/11/2021
Ti sei spiegato benissimo, dovrebbe essere proprio lo scopo dei tipi generici, ho solo basi teoriche sull'argomento, non ho mai applicato.

Sono incuriosito, ci guarderò. :rofl:


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2131
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:41
Mercoledì, 01/12/2021
Perfetto, con un pò di pratica ho trovato la soluzione.

Ecco la soluzione

Codice sorgente - presumibilmente C#

  1. //Chiedo al server di Restituirmi il tipo CharPaket, E di leggere invece l'argomento come PacketData.
  2. CharPaket test = client.SendGetPacket<CharPaket, PacketData>(p);
  3.  
  4.  
  5. public T SendGetPacket<T,I>(I strict)
  6.         {
  7.             PacketData p = new PacketData();
  8.             CharPaket ch = new CharPaket();
  9.            
  10.             if(typeof(I) == typeof(PacketData))
  11.             {
  12.                 object pdata = strict;
  13.                 if(((PacketData)pdata).Command == (uint)PacketHeader.HeaderCommand.ACT_LOGIN)
  14.                 {
  15.                     //
  16.                 }
  17.  
  18.                 if(((PacketData)pdata).Command == (uint)PacketHeader.HeaderCommand.ACT_GET_CHAR)
  19.                 {
  20.                     ch = GetCharInfo(p);
  21.                 }
  22.             }
  23.  
  24.  
  25.             return (T)Convert.ChangeType(ch,typeof(T));
  26.         }



Funziona alla perfezione :k:


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo