尝试创建一个程序,我目前正在使用字符串作为曲目标题但是得到下面的错误,这里是出现错误的代码
string TotalTracks;
TotalTracks = loadfile.ReadLine();
int32TotalTracksInt = Convert.ToInt32(TotalTracks);
答案 0 :(得分:0)
如果字符串不是整数,Convert.ToInt32方法将抛出异常。
我建议确保loadfile.ReadLine()的结果是一个有效的整数。
答案 1 :(得分:0)
您的错误很可能是由于数据输入造成的,如果输入没有被清理,则转换方法可能会抛出错误,因为该值无法转换为整数。根据您的评论,似乎缺少一些基础知识。
"我正在阅读文件。"
public static IEnumerable<string> ReadTrackFile(FileInfo file)
{
var line = String.Empty;
using(StreamReader reader = File.OpenText(file.FullName))
while((line = reader.ReadLine()) != null)
yield return line;
}
因此我们创建了一种方法来读取文件的内容。该方法还捕获了所有单独的行。由于缺乏说明,我假设您有一个带有以下格式的分隔文件。
Jimmy Hendrix - Greatest Hits - 1 - Gypsy Eyes
所以我们会像下面那样塑造我们的对象。
public class Music
{
public string Artist { get; set; }
public string Album { get; set; }
public int TrackNumber { get; set; }
public string TrackName { get; set; }
}
既然已经定义了我们的对象,我们就会沿着这些方向做点什么。
var output = ReadTrackFile(...);
foreach(var record in output)
yield return ArtistMapper.MapToObject(record);
基本上您可以执行映射方面,但您可以将这些值直接映射到对象。但那将是一种更合适的方法。
至于验证,您只需执行以下操作即可。
int.TryParse(value, out output);
然后您可以使用输出,但它将默认值保持为零,或者您可以在尝试使用之前有条件地检查以确保值是整数。代码流和应用程序要求将指定使用哪种方法。
答案 2 :(得分:0)
好的问题很明显,你没有从这个方法获得有效的数据 loadfile.ReadLine();
因此,错误&#39;输入字符串的格式不正确。&#39;
代码
var tracks = loadFile.ReadLine();
if(int.TryParse(tracks, out int totalTracks)
return totalTracks;
throw new Exception("Invalid data");
答案 3 :(得分:0)
部分
loadfile.ReadLine();
返回某种非数字字符。 Int32.TryParse将告诉您字符串是否可以转换,您可以将其用作转换条件(如果可能)或继续进行错误处理。例如:
var text = "31235";
//returns true or false if the number can be parsed / converted
var isValidNumber = Int32.TryParse(text, out int result);
if (isValidNumber)
{
Convert.ToInt32(text);
}
else
{
//error handling here
}