Метод принимает массив чаров (new char[] { ' ', '.', '?', '!' })
и опцию удаления пустых значений (StringSplitOptions.RemoveEmptyEntries)
return str.Split(new char[] { ' ', '.', '?', '!' }, StringSplitOptions.RemoveEmptyEntries).Length;