Я не понял из вопроса, как исключение throw выявляет исходный код.
Однако вы ничего не можете сделать, чтобы полностью скрыть свой исходный код.Поскольку сборка .NET содержит IL-код, который всегда может быть легко переработан с помощью таких инструментов, как Reflector.
Лучшее, что вы можете сделать - это запутать код.Есть куча разных инструментов и алгоритм запутывания.Google для .NET obfuscator
, и вы выбираете инструмент, который вам нравится больше.
Вы можете найти немало обфускаторов, перечисленных здесь: http://msdn.microsoft.com/en-us/vcsharp/aa336818.