Таким образом, вы не хотите изменить регистр букв!Я знаю, что вы не сказали, что сделали, но некоторые из нас предположили это, потому что этот вопрос возникает так часто.В этом случае это регулярное выражение - это все, что вам нужно:
s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");
Выполнение положительного просмотра за строчной буквой также гарантирует, что вы не добавите подчеркивание в начало строки.