Per incorporati tipi numerici, una conversione implicita può essere fatta quando il valore da memorizzare può adattarsi nella variabile senza essere troncato o arrotondata. Ad esempio, una variabile di tipo long (integer a 8 byte) può memorizzare qualsiasi valore memorizzato da un int (4 byte su un computer a 32 bit).
consultare implicito sezione di conversione in questo https://msdn.microsoft.com/en-us/library/ms173105.aspx
Ora venendo al tuo esempio, ovviamente byte + byte non deve necessariamente essere un byte. Quindi byte + byte potrebbe essere int. In tal caso, "Conversione implicita" non si adatta perché Il lancio verso l'alto è possibile non viceversa, ovvero int può essere convertito in long, byte può essere convertito in int.
Quindi nel tuo caso hai bisogno di conversione esplicita. Il compilatore ha bisogno di te per eseguire questo.
Tuttavia, se una conversione non può essere fatta senza il rischio di perdere informazioni, il compilatore richiede che si esegue un conversione esplicita, che si chiama un cast. Un cast è un modo per informare esplicitamente il compilatore che si intende effettuare la conversione e che si è consapevoli che potrebbe verificarsi una perdita di dati.
Consultare conversione esplicita nella stessa pagina.
così per il tuo esempio
rgb.Red = (byte)(Convert.ToByte(Math.Round((h - 4) * delta)) + rgb.Green);
Questo permette di convertire int a byte in modo esplicito.
Qual è RGB, penso che sia oggetto di classe Color cioè il motivo per cui non funziona .... –
@Javed Akram, 'rgb' è un' struct' come indicato nell'aggiornamento –
ohh, OK le risposte date dagli esperti sono all'altezza del marchio. –