Se c’è un aspetto che lo sviluppatore medio non tiene nella giusta considerazione quando scrive il codice è il cast tra tipi. Questo lo deduco solo dalla mia esperienza sul campo, ovvio.
Sto parlando del cast ridondante, cioè quel cast semplicemente inutile e che potrebbe essere tranquillamente evitato, basterebbe solo un pò di attenzione in più, e forse un pò di copia ed incolla in meno 
Spesso un cast ridondante non è immediatamente percepibile.
Se si scrive una cosa del genere:
1: XmlDocument xmlDoc = new XmlDocument();
2: // ......
3: // ....
4: XmlNode node = (XmlNode)xmlDoc;
non è immediatamente visibile (ad occhio, intendo) il cast ridondante della riga 4, poichè un oggetto XmlDocument può essere tranquillamente assegnato ad un oggetto XmlNode in quanto quest’ultimo è la classe da cui deriva, e quindi per i principi basilari del polimorfismo o per il principio di sostituzione di Liskov (al secolo Barbara Liskov, è quindi una donna
) , fate voi, per cui, se B è una classe derivata da A, allora oggetti di tipo A possono essere sostituiti da oggetti di tipo B senza alterare la correttezza dei risultati.
Quindi il codice precedente può essere riscritto senza la ridondanza del cast, cosi:
1: XmlDocument xmlDoc = new XmlDocument();
2: // ..
3: // ..
4: XmlNode node = xmlDoc;
Ma quando vedo cose del genere:
1: Byte b = (System.Byte) 0;
non riesco proprio a non rabbrividire, anche con il caldo torrido di questi giorni
.
Ma come è possibile effettuare un cast del valore zero verso un tipo Byte !?!?!, quando, lo sanno pure i bambini, il tipo primitivo Byte rappresenta un valore intero senza segno compreso tra 0 e 255 ?.
Scusate lo sfogo…..