"Строки передаются по значению", конечно, не совсем корректно. Просто они неизменяемые и когда вы хотите изменить строку, на самом деле создается копия первой, меняется и отдается по ссылке.
А я не понял, в чем у вас тогда вопрос? С ссылочными типами работает и ваш вариант, т.к. вы изменяете объект по ссылке. Со значимыми типами используйте мой вариант (он работает и с ссылочными и со значимыми). Отдельно изучите вопрос, почему строки, хоть и являются ссылочными типами, передаются по значению.
Отражение - это из другой оперы. Просто обе эти переменные будут указывать на один объект.
А вопрос ваш не очень понятен - при x>0 получается правильный результат (10), что именно вы хотите, чтобы вам объяснили?