Perché il Designer di Windows Form esegue il cast di int a byte e poi di nuovo a int per FromArgb?

Stavo guardando un po ‘di codice oggi e ho visto qualcosa di simile al seguente:

var colour = Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(213)))), ((int)(((byte)(193))))); 

Quando ho chiesto perché fosse così, dal momento che Resharper ha confermato che tutti i cast sono ridondanti, mi è stato detto che il Designer l’ha fatto in quel modo e lo hanno copiato.

Ho avuto un aspetto e abbastanza sicuro il Designer genera il codice come sopra quando si imposta una proprietà su un colore personalizzato.

Qualcuno sa perché il Designer avrebbe fatto questo? Non sembra avere senso in faccia, a meno che mi manchi qualcosa?

    Questo codice è generato automaticamente dal serializzatore di codice incorporato nel designer Winforms. La parte colpevole qui è la class System.Drawing.ColorConverter, TypeConverter for Colour. Il codice rilevante nel suo metodo ConvertTo () è:

      member = typeof(Color).GetMethod("FromArgb", new Type[] { typeof(int), typeof(int), typeof(int) }); arguments = new object[] { color2.R, color2.G, color2.B }; 

    Le proprietà R, G e B restituiscono un byte. Quindi il serializzatore di codice prima genera il valore letterale intero e applica il cast (byte) per far corrispondere il tipo di argomenti. Quindi vede che FromArgb () accetta gli argomenti integer, quindi applica il cast (int).

    Questo è solo un codice generato dalla macchina maniacale. Deve solo essere corretto, non deve essere carino.

    Non c’è beneficio. Tutto ciò che fa è rendere il codice difficile da leggere.

    Questo è preferibile

     var colour = Color.FromArgb(227, 213, 193); 

    o anche la versione del canale alfa:

     var colour = Color.FromArgb(255, 227, 213, 193); 

    Come sottolinea @Alexei Levenkov, forse l’autore era cauto, ma dato il nome chiaro del metodo e il suo (ben noto) uso previsto, perché qualcuno dovrebbe usare un valore maggiore di 255 per uno qualsiasi dei parametri?

    Ref. Color.FromArgb Method