Muy bueno tu programa hasta ahora. Solo que la solución a tu pregunta la tienes ante tus ojos, y no la has visto porque estás buscando el camino complicado (pensando en encontrar una función/instrucción que te convierta un número en un signo dado)... Pero lo que debes hacer es muy simple:
Solo asigna "manualmente", y sin ninguna función, el caracter '#' a la posición n[i].
Sip. Así de simple!
if (Char.IsNumber(n[i]) == true)
n[i] = '#'
Precaución: observa que el caracter que quieres insertar (en sustitución del número), por ser un char, está encerrado entre 'comillas simples', y no con las comillas dobles tradicionales que usas para las cadenas "String".
---
Recomendación off-topic: IsNumber, IsUpper e IsLower, son funciones booleanas que retornan un valor "true" o "false", según se cumpla o no la condición que evaluan; lo cual quiere decir que, en este caso, si un caracter es un número, la expresión if (Char.IsNumber(n[i])) será suficiente para que tu programa entienda que debe ejecutar las líneas respectivas si eso se cumple; sin necesidad de que hagas la comparación extra de que ese valor es equivalente (==) a true. Dicho de otro modo, no necesitas escribir:
if (Char.IsUpper(n[i]) == true)
con la siguiente expresión obtendrás el mismo resultado, pues igual el if evaluará como true o false el resultado de la función (y le ahorras al procesador una comparación adicional innecesaria ;¬)
if (Char.IsUpper(n[i]))
---
Suerte ;¬)