не могу текст из файла разделить символом - C#

Dotnet выдаёт ошибку: error CS0165: Использование локальной переменной "code", которой не присвоено значение.

код:

using System.IO;

ReadFile();

void ReadFile()
{
  String code;
  try
  {
    Console.Write("Enter txt-file path: ");
    string path = Console.ReadLine();
    StreamReader sr = new StreamReader(path);
    code = sr.ReadLine();
    while (code != null)
    {
        Console.WriteLine(code);
        code = sr.ReadLine();
      }
      sr.Close();
    }
    catch(Exception e)
    {
      Console.WriteLine("Exception: " + e.Message);
    }
    finally
    {
      Console.WriteLine("Executing finally block.");
    }
    string code1 = code;
    string[] words = code1.Split('\n');
    Console.WriteLine(words[2]);
}

так уже пробовал:

using System.IO;

ReadFile();

void ReadFile()
{
  String code = "";
  try
  {
    Console.Write("Enter txt-file path: ");
    string path = Console.ReadLine();
    StreamReader sr = new StreamReader(path);
    code = sr.ReadLine();
    while (code != null)
    {
        Console.WriteLine(code);
        code = sr.ReadLine();
      }
      sr.Close();
    }
    catch(Exception e)
    {
      Console.WriteLine("Exception: " + e.Message);
    }
    finally
    {
      Console.WriteLine("Executing finally block.");
    }
    string code1 = code;
    string[] words = code1.Split('\n');
    Console.WriteLine(words[2]);
}

Как можно исправить? Помогите!


Ответы (1 шт):

Автор решения: Aarnihauta

Ошибка CS0165 появляется в том случе, когда значение переменной не было установлено (т.е где-то в блоке кода вы объявили переменную, но не присвоили ей значение). Вы можете указывать поля внутри пространства класса (т.е вне метода Main, тогда компилятор ругаться не будет, однако исключение может появится на стадии работы программы, если вы конечно же не присвоите значние этому полю)

Например вот этот код не запустится

string a;
Console.WriteLine(a); //CS0165

Но если мы сделаем вот так, то код скомпилируется:

string a = "smth text";
Console.WriteLine(a);

Теперь к тому, что вы хотите сделать. Если Вам нужно прочитать файл и разбить его на строки, то можно сделать вот так (обратите внимание на using):

string path = Console.ReadLine();
List<string> list = new List<string>(); //если мы бы не написали new "List<string>()", то получили бы CS0165
using (StreamReader reader = new StreamReader(path))
{
    string fileContent = reader.ReadToEnd();
    list = fileContent.Split('\n').ToList();
}

Или вот так:

string path = Console.ReadLine();
string fileContent = File.ReadAllText(path);
string[] words = fileContent.Split('\n');

А можно и вообще ничего не сплитить, сразу получить массив строк из файла:

string path = Console.ReadLine();
string[] lines = File.ReadAllLines(path);
→ Ссылка