'输入字符串的格式不正确。'

时间:2018-04-17 19:48:45

标签: c#

尝试创建一个程序,我目前正在使用字符串作为曲目标题但是得到下面的错误,这里是出现错误的代码

string TotalTracks; 
TotalTracks = loadfile.ReadLine();
int32TotalTracksInt = Convert.ToInt32(TotalTracks); 

4 个答案:

答案 0 :(得分:0)

如果字符串不是整数,Convert.ToInt32方法将抛出异常。

我建议确保loa​​dfile.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
        }