未处理的异常:System.ArgumentNullException:值不能为空
Unhandled Exception: System.ArgumentNullException: Value cannot be null
我试图从 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 打印 genre 并且它正在工作,所以我确保它不是 null 但我不知道为什么我会收到此错误。
这不是其他问题的重复。循环无法正常工作,您可以在下方找到修复方法。
由于您设置循环的方式,您遇到了异常。您检查 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)));
}
这个例子并不完整,因为您可能应该处理输入文件的各种问题。 (例如,如果文件中没有足够的行,或者您正在解析的行不包含正确类型的数据怎么办)
要自己发现此类问题,您应该查看 debugging。
我试图从 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 打印 genre 并且它正在工作,所以我确保它不是 null 但我不知道为什么我会收到此错误。
这不是其他问题的重复。循环无法正常工作,您可以在下方找到修复方法。
由于您设置循环的方式,您遇到了异常。您检查 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)));
}
这个例子并不完整,因为您可能应该处理输入文件的各种问题。 (例如,如果文件中没有足够的行,或者您正在解析的行不包含正确类型的数据怎么办)
要自己发现此类问题,您应该查看 debugging。