Me imagino que el ejemplo que puso xknown es para c3#, ya que como tienes caracteres de escape tienes que colocar una @ antes para que lo tome como caracter.
Te quedaría así:
Cita: cadena = Regex.Replace(cadena, "\[(mailto:.*)?\]", "<a href=\"$1\">", RegexOptions.IgnoreCase)