Utilizzando Casting null doesn't compile come fonte di ispirazione, e dal commento di Eric Lippert:Perché questa conversione implicita da int a uint funziona?
che dimostra un caso interessante. "uint x = (int) 0;" sarebbe riuscire anche se int non è implicitamente convertibile in uint.
Sappiamo questo non funziona, perché object
non può essere assegnato a string
:
string x = (object)null;
ma questo, anche se intuitivamente non dovrebbe:
uint x = (int)0;
Perché fa il compilatore permettono questo caso, quando int
non è implicitamente convertibile in uint
?
Suppongo che la stessa ragione "unità x = 0" funzioni. '0' è un int firmato a meno che non si specifichi' unit x = 0U'. – vcsjones
Probabilmente 6.1.9 delle specifiche e attualizzazione del cast int, perché 0 è già un int. Mentre generalmente un int non è convertibile in modo implicito in uint (6.1.2), può essere convertita una * espressione costante * di tipo int. –
Quale valore ha '0' implicitamente come espressione costante allora?Il compilatore ignora semplicemente il cast esplicito '(int)' e considera '0' come una costante' uint'? – Yuck