Dúvida no C#

Oi pessoal! Eu sou novo aqui e estou no primeiro período de Sistemas de Informação. Eu montei um código só que fala que os indíces estão fora da matriz. Eu entendo o que esse erro ta dizendo mas não consigo encontrar o erro. Alguém poderia me ajudar. Segue o código abaixo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{       
    class Program
    {
        public static string menu()
        {
            string opcao;
            bool v;
            
            do
            {
                Console.WriteLine("Escolha a opção desejada");
                Console.WriteLine("1 - Inserir");
                Console.WriteLine("2 - Alterar");
                Console.WriteLine("3 - Remover");
                Console.WriteLine("4 - Ordenar");


                opcao = Console.ReadLine();

                if (opcao != "1" && opcao != "2" && opcao != "3" && opcao != "4")
                {
                    Console.WriteLine("Opção inválida");
                    v = true;
                }
                else
                {
                    v = false;
                }
            } while (v == true);

            return opcao;
        }

        static string[] Expancao(string[] vetor)
        {
            string[] novovetor = new string[vetor.Length + 1];


            for (int i = 0; i < vetor.Length; i++)
            {
                novovetor[i] = vetor[i];
            }

            return novovetor;

        }

        static void Main(string[] args)
        {
            /*
             n = variavel que aumenta o tamanho do vetor.
             i = variavel que preenche o vetor.
             op = váriavel que recebe o valor do metódo menu.
             v = váriavel que checa se o usuário vai digitar algo diferente de Sim ou Não.
             resposta = váriavel que encerra o programa
            */

            StreamWriter sw;
            StreamReader sr;
            string[] vetor;
            string op, acao, resposta;
            int j, opcao;
            bool v;

            j = -1;

            vetor = new string[0];

            do
            {
                op = menu();
                opcao = int.Parse(op);

                j++;

                switch (opcao)
                {
                    case 1:

                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt", true);
                        Console.WriteLine("Digite a ação");
                        acao = Console.ReadLine();
                        sw.WriteLine(acao);
                        sw.Close();

                        break;
                    case 2:

                        sr = new StreamReader(@"C:\Users\410533\Desktop\BD.txt");
                        j = 0;
                        //Ler os vaores do arquivo e armazenar no vetor
                        while (!sr.EndOfStream)
                        {
                            vetor = Expancao(vetor);
                            vetor[j] = sr.ReadLine();
                            j++;
                        }
                        sr.Close();

                        // Apaga o arquivo
                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt");
                        for (int i = 0; i < vetor.Length; i++)
                        {
                            sw.WriteLine("");
                        }
                        sw.Close();

                        //Recebe a pergunta do usario e apaga se existir
                        Console.WriteLine("Digite a ação a ser alterada");
                        acao = Console.ReadLine();
                        for (int i = 0; i < vetor.Length; i++)
                        {
                            if (vetor[i] == acao)
                            {
                                Console.WriteLine("Digite a nova acao");
                                vetor[i] = Console.ReadLine();
                            }
                        }

                        //Reescreve o arquivo
                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt");
                        for (int i = 0; i < vetor.Length; i++)
                            sw.WriteLine(vetor[i]);
                        sw.Close();

                        break;
                    case 3:

                        sr = new StreamReader(@"C:\Users\410533\Desktop\BD.txt");
                        j = 0;
                        //Ler os vaores do arquivo e armazenar no vetor
                        while (!sr.EndOfStream)
                        {
                            vetor = Expancao(vetor);
                            vetor[j] = sr.ReadLine();
                            j++;
                        }
                        sr.Close();

                        // Apaga o arquivo
                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt");
                        for (int i = 0; i < vetor.Length; i++)
                        {
                            sw.WriteLine("");
                        }
                        sw.Close();

                        //Recebe a pergunta do usario e apaga se existir
                        Console.WriteLine("Digite a ação a ser removida");
                        acao = Console.ReadLine();
                        for (int i = 0; i < vetor.Length; i++)
                        {
                            if (vetor[i] == acao)
                                vetor[i] = "";
                        }

                        //Reescreve o arquivo
                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt");
                        for (int i = 0; i < vetor.Length; i++)
                            if (vetor[i] != "")
                                sw.WriteLine(vetor[i]);
                        sw.Close();

                        break;
                    case 4:

                        sr = new StreamReader(@"C:\Users\410533\Desktop\BD.txt");
                        j = 0;
                        //Ler os vaores do arquivo e armazenar no vetor
                        while (!sr.EndOfStream)
                        {
                            vetor = Expancao(vetor);
                            vetor[j] = sr.ReadLine();
                            j++;
                        }
                        sr.Close();

                        // Apaga o arquivo
                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt");
                        for (int i = 0; i < vetor.Length; i++)
                        {
                            sw.WriteLine("");
                        }
                        sw.Close();

                        int x, aux, aux2;
                        string aux3;
                        for (int i = 1; i < vetor.Length; i++)
                        {
                            x = i - 1;
                            aux3 = vetor[i];
                            aux = vetor[i][0];
                            if (aux > 90)
                                aux -= 32;
                            aux2 = vetor[x][0];

                            if (aux2 > 90)
                                aux2 -= 32;

                            while (aux < aux2 && x >= 0)
                            {
                                vetor[x + 1] = vetor[x];
                                x--;
                                if (x > 0)
                                {
                                    aux2 = vetor[x][0];
                                    if (aux2 > 90)
                                        aux2 -= 32;
                                }

                            }
                            vetor[x + 1] = aux3;
                        }

                        //Reescreve o arquivo
                        sw = new StreamWriter(@"C:\Users\410533\Desktop\BD.txt");
                        for (int i = 0; i < vetor.Length; i++)
                            if (vetor[i] != "")
                                sw.WriteLine(vetor[i]);
                        sw.Close();
                        break;
                }

                Console.WriteLine("Deseja encerrar o programa (S-N)! ");
                resposta = Console.ReadLine();

                while (resposta != "S" && resposta != "N")
                {

                    Console.WriteLine("Deseja encerrar o programa (S-N)! ");
                    resposta = Console.ReadLine();

                }

            } while (resposta == "N");
        }
    }
}

Eu corrigi. Vê agora.
Alguém sabe o nome do livro de C# que na capa tem uma formiguinha?
Obrigado!

Ao postar códigos, por favor, use a tag code:
http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

Você pode acessar o String como se fosse um vetor.

string exemplo = "olá!"; Console.WriteLine("Primeira letra: " + exemplo[0]);

Lembre-se que um vetor criado com “n” índices terá os índices variando de 0 até n-1.

Ok! Obrigado! É possível editar o nome do forum?

Oi.

Você fecha a tag code com [/code].

E não só [code] como vc escreveu.

E não é possível editar o próprio nome.

if (resposta != "Sim" || resposta != "Não") 

Esta condição está cheirando mal. Não seria

if (resposta != "Sim" && resposta != "Não") 

ou

if ( ! (resposta == "Sim" || resposta == "Não") )

?