输入字符串格式不正确?

时间:2014-01-10 17:51:59

标签: c# streamreader

好的,嘿。我制作了游戏中的游戏程序。我让它在我的计算机上从他们自己的.txt加载一个播放器的数据。每当我尝试命令(.load)它告诉我(在split [1]它转换为int32)这只是一个测试,看看你的炸弹加载,输入字符串是不是正确的格式,继承代码:

StreamReader streemy = new StreamReader(@"c:\Usernames\" + player[m.GetInt(0)].username + ".txt");
string read = streemy.ReadToEnd();
if (!string.IsNullOrEmpty(read))
{
   string[] split = read.Split('=');
   player[m.GetInt(0)].bombs = Convert.ToInt32(split[1]);
   Say(names[m.GetInt(0)].ToUpper() + ": You data has been loaded!");
   streemy.Close();
}
else
{
   Say(names[m.GetInt(0)].ToUpper() + ": Your data was empty :( Say '.save' to save your current data!");
}

.save将数据保存到.txt,“names [m.GetInt(0)]”是他们的用户名,Say只是告诉他们在游戏中的消息。谢谢你的帮助! PS:玩家是一个结构,它有像炸弹一样的内容。

2 个答案:

答案 0 :(得分:1)

我建议您使用Int32.TryParse代替Convert.ToInt32

因此,如果该值不是有效整数,那么您可以将其视为0或无炸弹

int numberOfBombs = 0;
bool result = Int32.TryParse(value, out numberOfBombs);

现在 numberOfBombs 将保留实际值,如果存在有效的整数字段,否则它将为0.

答案 1 :(得分:0)

您必须获得FormatException。 当辩论的格式不正确时,会抛出FormatException 我认为split [1]的值不是有效整数 根据msdn。

  

FormatException:value不包含可选符号后跟一系列数字(0到9)。

使用ToInt32(string)方法相当于将值传递给Int32.Parse(String)方法。使用current thread culture的格式约定来解释值 您可以调用Int32.TryParse方法。它返回一个布尔值,指示转换是成功还是失败。