29/11/21 12:57
Carlo
Se alla riga 32 hai un errore è normale, cerchi di ritornare un oggetto quando invece hai dichiarato che la funzione deve ritornare un tipo generico T.
alla riga 32:
return (T)_ret;
Naturalmente ritornando un tipo generico, poi devi eseguire tutti i controlli del caso per estrarre il valore che ti interessa.
Personalmente cambierei la funzione in:
object SendGetPacket<T>(T t)
Visto che il tipo generico al ritorno non ti serve più, fai la tua scelta...
Se invece sei certo che restituisci sempre un PaketData, per evitare sempre gli stessi controlli e conversioni di tipo:
alla riga 32:
return (T)_ret;
Naturalmente ritornando un tipo generico, poi devi eseguire tutti i controlli del caso per estrarre il valore che ti interessa.
Personalmente cambierei la funzione in:
object SendGetPacket<T>(T t)
Visto che il tipo generico al ritorno non ti serve più, fai la tua scelta...
Se invece sei certo che restituisci sempre un PaketData, per evitare sempre gli stessi controlli e conversioni di tipo:
PacketData SendGetPacket<T>(T t) { //PacketData è un Pacchetto strutturato generico //che non richiede particolari accortenze //Diversamente dagli altri, ha solo funzioni limitate //di Ricezione e riposta di 2 semplici argomenti //Argument1 e Argument2 che in seguito i valori //vengono convertiti in base al tipo di richiesta //Contenuto nell'header PacketData p = new PacketData(); if (typeof(T) == typeof(CharPaket)) //Se T in argomento è di tipo CharPacket { object ot = t; if(((CharPaket)ot).hp <= 0) //se personaggio gli HP sono < = di 0 { //Invio richiesta di Morte al server p.Command = (uint)PacketHeader.HeaderCommand.ACT_CHAR_DEATH; p.Argument1 = ((CharPaket)ot).accountID.ToString(); //Id Account p.Argument2 = ((CharPaket)ot).CharNum.ToString(); //Numero del personaggio nel database } } return p; }
Ultima modifica effettuata da Carlo 29/11/21 14:02
in programmazione tutto è permesso