Необработанное исключение: System.ArgumentNullException: значение не может быть нулевым - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь прочитать текстовый файл в C # и назначить каждую строку определенным переменным, но я получаю необработанное исключение: System.ArgumentNullException: значение не может быть нулевым. Ошибка при попытке преобразовать строку в SongGenre.

public static void LoadSongs(string fileName)
{
    string title = "a";
    string artist;
    string length;
    string genre;
    TextReader reader = new StreamReader(fileName);
    while (title != null)
    {
        title = reader.ReadLine();
        artist = reader.ReadLine();
        length = reader.ReadLine();
        genre = reader.ReadLine();
        songs.Add(new Song(title, 
                           artist, 
                           Convert.ToDouble(length), 
                           (SongGenre)Enum.Parse(typeof(SongGenre), 
                           genre)));
    }
    reader.Close();
}

имя файла относится к текстовому файлу, который в порядке. Я пытался сделать это вне цикла, например:

TextReader reader = new StreamReader(fileName);
string title = reader.ReadLine();
string artist = reader.ReadLine();
double length = Convert.ToDouble(reader.ReadLine());
SongGenre genre = (SongGenre)Enum.Parse(typeof(SongGenre), 
                                        reader.ReadLine());
songs.Add(new Song(title, artist, length, genre));

string title1 = reader.ReadLine();
string artist1 = reader.ReadLine();
double length1 = Convert.ToDouble(reader.ReadLine());
SongGenre genre1 = (SongGenre)Enum.Parse(typeof(SongGenre), 
                                         reader.ReadLine());
songs.Add(new Song(title1, artist1, length1, genre1));

, и это сработало. Я также попытался напечатать жанр с помощью Console.WriteLine, и он работал, поэтому я убедился, что он не равен нулю, но я не знаю, почему я получаю эту ошибку.

Это не дубликат других вопросов,Цикл не работает правильно, и ниже вы можете найти, как это исправить.

1 Ответ

0 голосов
/ 09 октября 2019

Вы получаете исключение из-за того, как вы настроили свой цикл. Вы проверяете title слишком рано. Для самой последней итерации все ваши переменные будут нулевыми, и вы получите исключение при попытке проанализировать пустую строку. Вам нужно что-то вроде этого.

while (true)
{
    title = reader.ReadLine();
    if (title == null) break;
    artist = reader.ReadLine();
    length = reader.ReadLine();
    genre = reader.ReadLine();
    songs.Add(new Song(title, 
                       artist, 
                       Convert.ToDouble(length), 
                       (SongGenre)Enum.Parse(typeof(SongGenre), 
                       genre)));
}

Этот пример неполон, так как вы, вероятно, должны решить все виды проблем с вашим входным файлом. (например, что, если в файле недостаточно строк или если анализируемые строки не содержат данных нужного типа)

Чтобы самостоятельно обнаружить такие проблемы, вам нужно заглянуть в отладки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...