Korzystanie Casting null doesn't compile jako inspiracji iz komentarzem Eric Lippert za:Dlaczego ta niejawna konwersja z int do uint działa?
który demonstruje interesujący przypadek. "uint x = (int) 0;" będzie powiodła się, nawet jeśli int nie jest domyślnie wymienialne na uint.
Wiemy, że to nie działa, ponieważ object
nie można przypisać do string
:
string x = (object)null;
Ale to robi, choć intuicyjnie nie powinien go:
uint x = (int)0;
Dlaczego czy kompilator pozwala na to przypadek, gdy int
nie jest niejawnie wymienialny na uint
?
Przypuszczam, że ten sam powód "jednostka x = 0" działa. '0' to podpisana int, chyba że podasz' unit x = 0U'. – vcsjones
Prawdopodobnie 6.1.9 specyfikacji i dyskonto int, ponieważ 0 jest już int. Chociaż ogólnie int nie jest niejawnie wymienialne na uint (6.1.2), można przekształcić * stałe wyrażenie * typu int. –
Jaką wartość ma "0" jako wyrażenie stałe?Czy kompilator po prostu ignoruje rzutowanie jawne '(int)' i traktuje '0' jako stałą' uint'? – Yuck