Ciao a tutti... rieccomi qui con una domanda.
Non si tratta di una richiesta di aiuto, in quanto ho risolto, ma di un semplice chiedervi: "secondo voi perché?".
Vi incollo due righe di codice in cui utilizzo una List di Byte e devo restituire il numero dei suoi elementi qualora ne abbia più di uno, altrimenti restituisco 0:
public Byte funzione() {
List<Byte> returnValue = new List<Byte>();
...
return ((returnValue.Count == 1)?returnValue.First():0);
}
L'errore di compilazione è:
Impossibile convertire in modo implicito il tipo 'int' in 'byte'. È presente una conversione esplicita. Probabile cast mancante.
Quindi penso: ok, l'errore può essere:
1. l'uguaglianza tra Byte e Int32 non funziona (ma non dovrebbe essere un problema visto che da Byte a Int32 avviene un cast implicito);
2. returnValue.First() non è di tipo Byte (ma anche qui non è possibile, visto che stiamo parlando di una lista generica);
3. il valore "0" non è considerato di tipo Byte in quanto da Int32 a Byte il cast non può avvenire implicitamente.
In effetti la riga seguente risolve il problema (notare il cast dello 0):
return ((returnValue.Count == 1)?returnValue.First():(Byte)0);
Ok... a questo punto penso... ok: ha senso... però poi faccio una prova ulteriore sostituendo quella forma contratta di if nella seguente:
if (returnValue.Count == 1)
{
return returnValue.First();
}
return 0;
E... sorpresa sorpresa... quel return 0 non da errori... quindi ha considerato lo 0 come Byte o ha eseguito un cast implicito... non lo so...
Fatto sta che mi domando: ma perché in un caso la cosa va bene (return 0) e nell'altro no ( (-)?-:0 )?
Avete delle idee in merito?
Grazie