Следующий код завершится ошибкой с сообщением «Не удалось неявно преобразовать тип int в uint. Существует явное преобразование (вы пропустили приведение?)»
int y = 0;
uint x = (int)y;
И это не удастся с: «Постоянное значение« -1 »не может быть преобразовано в« uint »»
uint x = (int)-1;
Таким образом, единственная причина, по которой работает uint x = (int)0;
, заключается в том, что компилятор видит, что 0 (или любое другое значение> 0) является постоянной времени компиляции, которую можно преобразовать в uint