Чтобы обойти некоторые из проблем / проблем, которые были выделены, я бы предложил сначала преобразовать строку в нижний регистр, а затем вызвать метод ToTitleCase. Затем вы можете использовать IndexOf ("Mc") или IndexOf ("O \ '") для определения особых случаев, требующих более пристального внимания.
inputString = inputString.ToLower();
inputString = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(inputString);
int indexOfMc = inputString.IndexOf(" Mc");
if(indexOfMc > 0)
{
inputString.Substring(0, indexOfMc + 3) + inputString[indexOfMc + 3].ToString().ToUpper() + inputString.Substring(indexOfMc + 4);
}